#include<stdio.h>
//二分查找法 (需要在已经排序好的情况下查找)
int main()
{
int nums[20] = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};
int left = 0,right = 19,ans = 20;
int i = 15;//i为需要查找的数字
while(left<=right)
{
int mid=((right-left)>>1)+left; //需要每次循环时都要改变mid的值
if(nums[mid]>i) //如果中间值要大于要找的值的情况下,最右端元素要变为原先中间值的左边一位元素
{
right = mid-1;
ans = mid;
}
else { //反之,中间值小于左边元素,左边元素要变为中间元素右一位的元素
left=mid+1;
}
}
printf("%d",ans);
return 0;
}
时间复杂度为O(logn)
空间复杂度为O(1)