2007-05-26

用C實做二元搜尋數

二元搜尋(Binary Search)
  從一個排序過的序列中找尋數值所在的位置(index)。  假設一個陣列大小為10,存放已排序好的數列如圖所示,搜尋數值16所在位址。

  1. 初始min為柱標0
  2. 初始max為柱標n-1
  3. 以min到max為搜尋範圍,每次都比較中間數值是否為搜尋之key,如果是就回傳其所在位址
  4. 如果中間值(mid)小於key,表示key存在於範圍mid+1到max之間,因此修改min為mid,並繼續下一次比較
  5. 如過中間值(mid)大於key,表示key存在於範圍min到mid-1之間,因此修改max為mid,並繼續下一次比較
  6. 重複3, 4, 5 步驟直到min大於max為止,此時還未找到key所在位址,表示key不存在于數列之中,因此回傳-1表示搜尋失敗
參考程式如下:
#include <stdio.h>

int binary_search(int arr[], int n, int key) {
int min = 0 ;
int max = n-1 ;
int mid ;
while(max >= min) {
mid=(min+max)/2 ;
if(arr[mid] == key)
return mid ;
else if(key < arr[mid])
max = mid-1 ;
else

min = mid+1 ;
}
return -1 ;
}

int main() {
int arr[10] = {1, 5, 7, 10, 12, 13, 16, 19, 20, 30} ;
printf("%d\n", binary_search(arr, 10, 13)) ;
system("pause") ;
return 0 ;
}

沒有留言: