本来觉得这是一个很简单,简单到入门必会的东西。
可是。但是现在却有了新的认识。
家里余粮不多,最近找米,有卖家问了个问题。你给写下二分查找
我心想,这么so easy的问题也问吗?
但是还是按规矩来写。一写不要紧。折磨了6,7分钟。总算是写出来,自己不满意,感觉有问题。
回来好好想想。这个问题确实考察了很多。
迭代实现,非递归
int binSearchNR(int * arr, int low, int high, int key){ if(!arr) return -1; int left = low, right = high; while(left <= right) { //int mid=(left+right)/2; //看到网上有人用这个取中间值,觉得这个很好。 int mid = left + ((right-left)>>1); if(arr[mid] < key) { left = mid + 1; //锁定右半部分 }else if(arr[mid] > key) { right = mid - 1; //锁定左半部分 }else return mid; //返回索引 } return -1; }
递归实现
int binSearchR(int arr[],int low,int high,int key){ if (low<=high) { int mid = (low+high)/2; if(key == arr[mid]) return mid; else if(key<arr[mid]) return binSearch(arr,low,mid-1,key); //左边的递归 else if(key>arr[mid]) return binSearch(arr,mid+1,high,key); //右边的递归 } else return -1; }
