编程珠矶 习题 4.6 利用二分搜索找到一个数在顺序数组里面的下限和上限

来源:互联网 发布:淘宝一口价怎么填 编辑:程序博客网 时间:2024/05/17 06:22
很显然,这道题目用二分搜索去解答,关键是怎么样去找这个上限点和下限点,方法很简单,每次去mid, 如果aa[mid] 比key要大的话,那么mid 是key的一个上限,但不一定是最小上限,同理。。。那么不断二分,不断逼近,最后即可求得解
void search_between(int arr[], int n_size, int *up, int *down,int key){int left = 0;int right = n_size - 1;*up = INT_MAX;*down = INT_MIN;while(left <= right){int mid = (left + right)>>1;if(arr[mid] < key){*down = mid;left = mid + 1;}else {*up = mid;right = mid - 1;}}}