折半查找(又名二分查找)
算法思路:
注意: (当前查找序列必须满足有序序列)
只能确定一个是否存在的值,如过有多个查找值,只会返回其中的一个.
代码实现
int binary_search(int *arr, int x, int n){
int low = 0; high = n -1;//数组长度为n,最后一个元素下标为n-1.
while (low <= high) {
int mid = (low + high)>>1;//位运算等价于 (low +high)/2;
if (arr[mid] == x) return mid;
if (arr[mid] > x) high = mid - 1;
if (arr[mid] < x) low = mid + 1;
}
return -1;
}
递归版本二分
int binary_search(int *arr, int head, int tail, int value ){
if (head > tail) return -1;