1. 개념
사전에서 단어를 찾는 것처럼 특정 단어가 있을 만한 부분으로 탐색 범위를 제한해 검색하는 방법. 따라서 저장된 데이터들이 미리 정렬된 형태를 가지고 있어야함.
2. 과정
① 찾고자 하는 자료에서 첫 번째 위치를 left, 마지막 위치를 right로 한다.
② 중간값 위치 middle을 구한다.
middle = left + (right-left) * ((key-a[left]) / (a[right]-a[left]))
③ 중간값 array[middle]가 원하는 값과 같으면 검색을 종료한다.
(array[middle] > 원하는 값) left = middle+1
(array[middle] < 원하는 값) right = middle-1
④ left <= right 이면 ③번 과정 반복
3. Code
#include <stdio.h> int inter_search(int a[], int n, int key) { int left, right, middle; left = 0; right = n-1; while(left <= right) { middle = left + (right-left) * ((key-a[left]) / (a[right]-a[left])); if(key > a[middle]) left = middle+1; else if(key < a[middle]) right = middle-1; else return middle; } return -1; } int main() { int i, key, find, count; int array[] = {5,7,12,15,20,22,25,27,30,32}; count = sizeof(array) / sizeof(int); printf("배열 array[] :"); for(i=0;i<count;i++) printf("%5d",array[i]); printf("\n"); printf("찾고자 하는 데이터 : "); scanf("%d",&key); find = inter_search(array, count, key); if(find < 0) printf("찾고자 하는 값이 없다.."); else printf("array[%d] = %d",find,array[find]); }
출처 : 서울특별시교육청 출간 고등교과 <알고리즘>
'Algorithm > 개념' 카테고리의 다른 글
| 이진 검색 트리(Binary Search Tree) (0) | 2018.03.22 |
|---|---|
| 알고리즘 풀이 종류 정리 (0) | 2018.02.23 |
| 이진 검색(Binary Search) (0) | 2018.02.09 |
| 정렬(Sort) (0) | 2018.02.07 |