BinarySearch二分法查找

来源:互联网 发布:word 矩阵 编辑:程序博客网 时间:2024/06/06 03:07

二分法查找思路比较简单,对于一个有序且无重复的序列,使用二分法查找的时间复杂度为O(lgN),效率很高,下面是二分法查找的代码实现,虽然代码很简单,但是一定要注意细节,做到轻松手写二分查找也是不错的嘛。
cpp实现:

#include<iostream>#include<vector>using namespace std;int bs(int n,vector<int> v, int lo, int hi){    int mid;    while (lo <= hi){//这里必须是小于等于号,等于号对应的情况是lo = hi,也就是数组长度为1的情况        mid = lo + (hi - lo) / 2;        if (v[mid] > n) hi = mid - 1;        else if (v[mid] < n) lo = mid + 1;        else return mid;//返回对应下标    }    return -1;//返回-1表示查无此数。}int main(){    //有序数组    vector<int> v = { 1, 5, 9, 12, 17, 18, 19, 24, 27, 31, 36, 39, 40, 44, 49, 53, 55, 58 };    int n, s = v.size();    cout << "请输入要查找的数:" << endl;    cin >> n;    int lo = 0, hi = s - 1;    int a = bs(n, v, lo, hi);    cout << "index is " << a << endl;    return 0;}

做完之后我想到一个问题,对于有重复的有序序列应该如何使用二分法来查找呢?应该是不可以使用二分法查找的。设想一个极端的例子,假设一个长度为10的数组,数组的元素全部为1,那么若待查找的元素的也为1,那么在查到相等的时候,lo,hi没法重新赋值了。

0 0
原创粉丝点击