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

34       puts("검색에 실패했습니다.");
                         35     else
                         36       printf("%d(은)는 x[%d]에 있습니다.\n", ky, idx);
                         37     free(x);                 /* 배열 해제 */
                         38
                         39     return 0;
                         40  }



                        search 함수는 배열 a의 처음부터 끝까지 n개의 요소를 대상으로 값이 key인 요소를 선형 검
                        색합니다. 반환값은 발견한 요소의 인덱스입니다. 또한 값이 key인 요소가 여러 개 존재한다
                        면 반환값은 검색 과정에서 처음 발견한 요소의 인덱스가 됩니다. 값이 key인 요소가 존재하

                        지 않으면 –1을 반환합니다.
                           3을 검색하면 이 값은 배열의 x[2]와 x[5]의 두 곳에 존재하지만 가장 먼저 찾은 x[2]의 인덱스 값인 2를 반환합니다.



                        배열을 검색할 때 배열 요소의 인덱스를 가리키는 변수는 i입니다. i는 0으로 초기화하고 요
                        소를 하나 검색할 때마다 while문이 제어하는 루프 본문의 끝에서 증가시킵니다. while문

                        을 빠져나가는 경우는 앞에서 살펴본 종료 조건 가운데 하나가 성립한 경우입니다.


                          1  i == n이 성립하는 경우        (종료 조건 ① : 검색 실패이므로 –1을 반환)
                          2  a[i] == key가 성립하는 경우  (종료 조건 ② : 검색 성공이므로 i를 반환)

                           while문을 반복할 때 계속해서 실행할지에 대한 판단은 회색으로 표시한 부분의 ‘1’로 평가합니다(계속 반복하기 위해 의
                        도적으로 넣은 값입니다). 따라서 조건 판단 횟수는 2회가 아니라 3회(while(1), if(i == n), if(a[i] == key))입니다.


                        이때 배열의 검색을 while문이 아니라 for문으로 구현하면 프로그램은 보다 짧고 간결해집
                        니다. 다음의 실습 3-2는 while문을 for문으로 수정한 프로그램입니다.


                          실습 3-2                                                •완성 파일 chap03/ssearch2.c
                         01  /*--- 요소의 개수가 n인 배열 a에서 key와 일치하는 요소를 선형 검색(버전 2 : for문) ---*/
                         02  int search(const int a[], int n, int key)
                         03  {
                         04     int i;
                         05     for(i = 0; i < n; i++)
                         06       if(a[i] == key)
                         07         return i;    /* 검색 성공 */
                         08     return –1;       /* 검색 실패 */
                         09  }

                            처음부터 순서대로 요소를 검사하는 선형 검색은 임의로 늘어놓은 배열에서 검색하는 방법 중 유일한 방법입니다.
                                                                                          03•검색  101
   96   97   98   99   100   101   102   103   104   105   106