关于二分查找

#include<iostream>
#include<algorithm>
using namespace std;
int a[] = {1, 1, 1, 1, 1, 2, 3};
//把集合分成了 [l, mid], [mid + 1, r]两个部分  把mid分到了左边那个部分
//寻找的是等于x的最小的数的下标
int find1(int x)
{
    int l = 0, r = 6;
    while(l < r)
    {
        int mid = l + r >> 1;
        if(a[mid] >= x)r = mid;
        else l = mid + 1;
    }
    return l;
}
//把集合分成了[l, mid - 1], [mid, r]两个部分, 把mid 分到了右边的部分
//寻找的是小于x最大的数的下标
int find2(int x)
{
    int l = 0, r = 6;
    while(l < r)
    {
        int mid = l + r >> 1;
        if(x > a[mid])l = mid;
        else r = mid - 1;
    }
    return l;
}
int main()
{
    //int t = find2(1);
    int t = lower_bound(a, a + 6, 1) - a;//寻找的是等于x的最小的下标
    cout << t << endl;
    int t2 = upper_bound(a, a + 6, 1) - a;//upper_bound返回的是大于x最小的下标
    cout << t2 << endl;
    cout << find1(1) << endl;//  mid分到左边    寻找等于x的最小的下标   等同于lower_bound
    cout << find2(1) << endl;//  mid分到右边   寻找小于x最大的下标
    
    return 0;
}

//程序运行结果
/*
0
5
0
0
*/

关于二分查找

上一篇:JavaWeb学习记录(八)——servlet获取配置信息


下一篇:Oracle之PL/SQL学习笔记