시간 복잡도:O(n)
int seq_search(int key, int low, int high)
{
int i;
for(i=low; i<=high; i++)
if(list[i]==key)
return i; // 탐색 성공
return -1; // 탐색 실패
}
int search_binary2(int key, int low, int high){
int middle;
while( low <= high ){ // 아직 키들이 남아 있으면
middle = (low+high)/2;
if( key == list[middle] ) return middle; // 탐색 성공
else if( key > list[middle] ) low = middle+1; // 오른쪽 부분리스트 탐색
else high = middle-1; // 왼쪽 부분리스트 탐색
}
return -1; // 탐색 실패
}
위의 코드는 반복알고리즘으로 구현
시간복잡도:O(logn)
사전이나 전화번호부를 탐색하는 방법
-'ㅎ'으로 시작하는 단어는 사전의 뒷부분에서 찾음
-'ㄱ'으로 시작하는 단어는 앞부분에서 찾음
탐색키가 존재할 위치를 예측하여 탐색하는 방법
보간 탐색은 이진 탐색과 유사하나 리스트를 불균등 분할하여 탐색한다
시간복잡도: O(log(logn))
int interpol_search(int key, int n)
{
int low, high, j;
low = 0;
high = n - 1;
while ((list[high] >= key) && (key > list[low])) {
j = (int)((float)(key - list[low]) / (list[high] - list[low]) * (high - low) + low);
if (key > list[j]) low = j + 1;
else if (key < list[j]) high = j - 1;
else low = j;
}
if (list[low] == key) return(low); // 탐색성공
else return -1; // 탐색실패
}
Reference C언어로 쉽게 풀어 쓴 자료구조, 천인국, 공용해, 하상호_2019