查找

来源:互联网 发布:大数据与商业模式变革 编辑:程序博客网 时间:2024/04/29 22:26

二分查找

基本实现

先排序

bool search_key(int key,int n,int *a){    int right,left,middle;    right = n-1;    left = 0;    while (left<=right){        middle = (left+right)/2;        if (a[middle]>key){            right = middle-1;        } else if (a[middle]<key){            left = middle+1;        } else{            return true;        }    }    return false;}

上述代码的注意点:
初始条件:left = 0,right=n-1
循环条件:left<=right,一定有等于

使用STL

二分查找可以通过C++中的lower_bound实现,这只是针对一般的数据结构。

//在区间[a,a+n)上进行检索int position = lower_bound(a,a+n,value)-a;//返回第一个大于等于value的index值//所以只需要比较a[position]==value即可判断value是否存在//注意的是如果value是最大的值,切不存在,position是越界的

其他应用

手动实现lower_bound

//存在一个升序有序的数组buf,其大小为size,目标数字为targetint base = 0 , top = size; //初始情况与二分查找一致while (base <= top) { int mid = (base + top) / 2;if (buf[mid] <= target) base = mid + 1; //符合前一部分数字规定else top = mid - 1; //否则}int ans = top; //最后,top即为我们要求的数字数组下标,buf[top]为该数字本身
0 0