折半查找是一类常用的查找算法,建立在数组已经有序的情况下,每次分两堆进行查找,其时间复杂度为O(logn)
(图暂未补充)
迭代代码
int BinarySearch(int * rcd, int key, int low, int high){
int mid;
while(low < high){
mid = (low + high)/2;
if(rcd[mid] == key) return mid;
else if(rcd[mid] < key) high = mid - 1;
else low = mid + 1;
}
return -1; //特例, index为-1表明无该元素
}
递归代码
相比于迭代代码,递归代码更简洁,好写点
int BinaySearch(int * rcd, int key, int low, int high){
int mid = (low + high)/2;
if(low - high < 0) return -1;
else if(rcd[mid] == key) return mid;
else if(rcd[mid] < key) return BinarySearch(rcd, key, low, mid - 1);
return BinaySearch(rcd, key, mid + 1, high);
}