Page 115 - Do it! 자료구조와 함께 배우는 알고리즘(C 언어, 3쇄)
P. 115

연습      Q3  요소의 개수가 n인 배열 a에서 key와 일치하는 모든 요소의 인덱스를 배열 idx의 맨 앞부
                         문제     터 순서대로 저장하고, 일치한 요소의 개수를 반환하는 함수를 작성하세요. 예를 들어, 요소의 개
                                수가  8인 배열 a의 요소가 {1, 9, 2, 9, 4, 6, 7, 9}이고 key가 9면 배열 idx에 {1, 3, 7}을 저장하
                                고 3을 반환합니다.


                                  int search_idx(const int a[], int n, int key, int idx[]);



                                 Q4   오른쪽처럼 이진 검색의 과정을 자세히 출력하는 프로                    |   0   1   2   3   4   5   6
                                                                                ---+------------------------------
                                그램을 작성하세요. 각 행의 맨 왼쪽에 현재 검색하고 있는 요                    |  <-             +            ->
                                                                                  3  |   1   2   3   5   6   8   9
                                소의 인덱스를 출력하고, 검색 범위의 맨 앞 요소 위에 <-, 맨                  |
                                                                                      | <-    +  ->
                                끝 요소 위에 ->, 현재 검색하고 있는 중앙 요소 위에 +를 출력             1    |   1   2   3   5   6   8   9
                                하세요.                                            2는 x[1]에 있습니다.



                                 Q5  우리가 살펴본 이진 검색 알고리즘 프로그램은 검색할 값과 같은 값을 갖는 요소가 하나 이
                                상일 경우 그 요소 중에서 맨 앞의 요소를 찾지 못합니다. 예를 들어, 아래 그림의 배열에서 7을 검
                                색하면 중앙에 위치하는 a[5]를 검색합니다. 맨 앞의 요소를 찾는 bin_search2 함수를 작성해
                                보세요.

                                  int bin_search2(const int a[], int n, int key);

                                   이진 검색 알고리즘에 의해 검색에 성공했을 때( a ) 그 위치로부터 앞쪽으로 하나씩 검사하면( b ) 여러 요
                                소가 일치하는 경우에도 가장 앞쪽에 위치하는 요소의 인덱스를 찾아냅니다


                                      0   1   2    3   4    ❺   6    7   8    9   10
                                 a    1   3   5    7   7    7   7    8   8    9   9

                                      0   1   2    ❸   4    ❺   6    7   8    9   10
                                 b    1   3   5    7   7    7   7    8   8    9   9
                                  배열의 맨 앞을 넘지 않는 범위에서 같은 값의 요소가 계속되는 한 앞쪽으로 스캔합니다.
























                                                                                          03•검색  115
   110   111   112   113   114   115   116   117   118   119   120