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

원래 데이터           보초
                        a  2를 검색(검색 성공)
                                   0   1   2    ❸   4    5   6    7
                                  6    4   3    2   1    3   8    2
                                                   검색할 값과 같은 요소를 발견
                        b  5를 검색(검색 실패)
                                   0   1   2    3   4    5   6    ❼
                                  6    4   3    2   1    3   8    5
                                                                    검색할 값과 같은 요소를 발견
                                                                    ※ 단 발견한 것은 보초
                                                 [그림 3-4] 보초법을 이용한 선형 검색


                        이 그림에서 배열의 요소 a[0] ~ a[6]은 초기에 준비해 놓은 데이터입니다. 검색하기 전에 검

                        색하고자 하는 키 값을 맨 끝 요소 a[7]에 저장합니다. 이때 저장하는 값을 보초(sentinel)라고
                        합니다.


                          a  : 2를 검색하기 위해 보초로 a[7]에 2를 저장합니다.
                          b  : 5를 검색하기 위해 보초로 a[7]에 5를 저장합니다.



                        그러면  b 처럼 원하는 값이 원래의 데이터에 존재하지 않아도 보초인 a[7]까지 검색하면 종료
                        조건 ②가 성립합니다. 이렇게 하면 원하는 키 값을 찾지 못 했을 때 종료 조건 ①이 없어도 됩

                        니다. 보초는 반복문에서 종료 판단 횟수를 2회에서 1회로 줄이는 역할을 합니다. 이런 보초법
                        을 도입하여 실습 3-1을 수정한 프로그램이 실습 3-3입니다. 회색으로 표시한 부분에서는
                        입력한 요소 개수에 1을 더한 크기의 배열을 생성합니다.
                           요소 개수로 7이 입력되면 요소 개수가 8인 배열을 생성합니다. 본래의 데이터에 보초의 자리를 추가하기 위해서입니다.


                        search 함수를 먼저 설명하고 그 다음에 실습 3-3의 나머지 코드를 설명하겠습니다.


                          실습 3-3                                              •완성 파일 chap03/ssearch_sen.c

                         01  /* 선형 검색(보초법) */
                         02  #include <stdio.h>
                         03  #include <stdlib.h>
                         04
                         05  /*--- 요소의 개수가 n인 배열 a에서 key와 일치하는 요소를 선형 검색(보초법) ---*/
                         06  int search(int a[], int n, int key)




                                                                                          03•검색  103
   98   99   100   101   102   103   104   105   106   107   108