二分查找总结

#include<iostream>
using namespace std;
int p[10]={0,1,2,4,5,5,5,7,8,9};
int firstGreatOrEquual(int n){//查找第一个大于等于n的数
        int x=0,y=9;
        while(x<=y){
                int m=x+(y-x>>1);//在x的基础上不断向后延伸
                if(p[m]>=n)
                        y=m-1;
                else
                        x=m+1;
        }
        return x;//p[x-1]即为最后一个小于n的数
}
int firstGreat(int n){//查找第一个大于n的数
        int x=0,y=9;
        while(x<=y){
                int m=x+(y-x>>1);
                if(p[m]>n)
                        y=m-1;
                else
                        x=m+1;
        }
        return x;//p[x-1]即为第最后一个小于等于n的数
}
int main()
{
        printf("%d
",p[firstGreatOrEquual(5)]);//5
        printf("%d
",p[firstGreat(5)]);//7
        printf("%d
", firstGreat(5)-firstGreatOrEquual(5));//5的个数
        return 0;
}
原文地址:https://www.cnblogs.com/aeipyuan/p/10704478.html