二分

///查找第一个大于等于的元素
///以下两种方式都可以用lower_bound和upper_bound来实现。
#include<stdio.h>
#include<string.h>
#include<iostream>
#include<algorithm>
using namespace std;
int a[10]= {1,2,2,2,3,3,3,5,6,7};
int main()
{


    int k;
    printf("1,2,2,2,3,3,3,5,6,7 ");
    while(~scanf("%d",&k))
    {
        int l=0,r=9;
        while(l<r)
        {
            int mid=(l+r)>>1;
            if(a[mid]<k)///即找到之后怎么做,若找第一个大于等于的就在找到等于号后继续向前找,如果小于了返回前一个
            {
                l=mid+1;
            }
            else
            {
                r=mid;
            }
            /*if(a[mid]>k){///找到大于查找元素的第一个,如果找不到返回最后一个位置这样就有可能找到元素位置就是想找元素位置。
                r=mid;
            }
            else{
                l=mid+1;
            }
                    }
                }
                    printf("%d ",l);*/
            // int ans;
            ///ans=lower_bound(a,a+10,k)-a;///减a为位置,函数返回为地址

        }
        printf("%d ",l);
    }
}

原文地址:https://www.cnblogs.com/VectorLin/p/5356327.html