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

Q1   실습 3-3의 search 함수를 while문이 아니라 for문을 사용하여 수정한 프로그램을 작성
                         연습
                         문제     하세요.


                                 Q2   오른쪽처럼 선형 검색의 스캐닝 과정을 상세하게 표시                    |   0   1   2   3   4   5   6
                                                                                ---+------------------------------
                                하는 프로그램을 작성하세요. 이때 각 행의 맨 왼쪽에 현재 검                    |  *
                                                                                  0  |  6   4   3   2   1   9   8
                                색하는 요소의 인덱스를 표시하고, 현재 검색하고 있는 요소                        |
                                                                                      |         *
                                위에 별표 기호 *를 표시하세요.                                1  |  6   4   3   2   1   9   8
                                                                                      |
                                                                                      |            *
                                                                                  2    |  6   4   3   2   1   9   8
                                                                                  3은 x[2]에 존재합니다.





                        이진 검색의 시간 복잡도
                        이진 검색법을 이용하면 검색할 요소의 범위를 절반씩 줄일 수 있습니다. 프로그램 각 단계의
                        실행 횟수와 복잡도는 표 3-2와 같습니다.



                             int bin_search(const int a[], int n, int key)
                             {
                          1    int pl = 0;                   /* 검색 범위 맨 앞의 인덱스 */
                          2    int pr = n – 1;                /* 검색 범위 맨 끝의 인덱스 */

                               do {
                          3      int pc = (pl + pr) / 2;       /* 중앙 요소의 인덱스 */
                          4      if(a[pc] == key)
                          5        return pc;                /* 검색 성공 */
                          6      else if(a[pc] < key)
                          7        pl = pc + 1;              /* 검색 범위를 뒤쪽 반으로 줄임 */
                          8      else
                          9        pr = pc – 1;              /* 검색 범위를 앞쪽 반으로 줄임 */
                          10    } while(pl <= pr);


                          11    return –1;                    /* 검색 실패 */
                             }

                           이 프로그램은 실습 3-4의 bin_search 함수를 수정한 코드입니다.











                                                                                          03•검색  113
   108   109   110   111   112   113   114   115   116   117   118