前提:本质上都是二分查找,这就意味着一定要是先排好顺序的。注意:都只能对整个数组进行二分查找
时间复杂度:O(logn)
1.lower_bound返回值为大于等于key的最小的值
源码如下:
//接口:排好序的数组的首地址(且只能是首地址),数组的大小size(不是位置),以及要比较的关键词
//返回大于等于k的最小值,如果找不到,返回的值是size(n)
int lower_bound(int *array, int size, int key)
{
//len表示元素的个数
int first = 0, middle;//first表示一段区间的首地址
int half, len;
len = size;
while(len > 0) {//len表示的是要寻找的区间的长度
half = len >> 1;//右移1位除二
middle = first + half;
if(array[middle] < key) {//如果不在middle上,那么要在右面的区间上
first = middle + 1;//不包括middle本身
len = len-half-1;