二分查找的前提必須是數組是有序的。
二分查找的思想爲:
在有序的數組中,先取出中間元素。然後判斷要查找的值與中間值是否相等, 若相等則直接返回結果,查找成功。
若不相等,則判斷中間值是否小於搜索值,若小於要搜索的值,則在中間值的右半區繼續找。若大於要搜索的值,則在中間值的左半區繼續找。不斷重得這個過程。直到找到數組的結尾。
代碼如下:
#include <stdio.h> /* 二分查找 1,34,56,7,8,90,456,3,234,4,54,23,45 在表中查找值爲54的數據元素。 */ int biSearch(int arr[],size_t len,int search); int main() { int arr[] = {1,34,56,7,8,90,456,3,234,4,54,23,45}; int count = sizeof(arr)/sizeof(arr[0]); int search = 54; int result = biSearch(arr,count,search); if(result >= 0){ printf("%d 在 arr中,索引是:%d",search,result); }else{ printf("%d 不在 arr中",search); } } /* 二分查找 */ int biSearch(int arr[],size_t len,int search) { int mid = 0,midvalue = 0, flag = -1,low = 1,high = len; while( low <= high ){ /* 先遍歷數組,每次取中間值,判斷是否等於搜索值,如果不是再判斷是從左邊還是右邊 繼續搜索 */ mid = (low+high)/2; midvalue = arr[mid]; if(search == midvalue ){ flag = mid; break; }else if(midvalue > search ){ high = mid-1; }else if(midvalue < search ){ low = mid+1; } } return flag; }