二分法查找
基本原理:通过比较所在区间中间元素的值,从而缩小元素在区间的范围
时间复杂度:O(log2n)
实现过程:①若寻找的值等于中间值,则此时中间值的下标即是所求;
②若寻找的值大于中间值,则左端点移到中位置+1;
③若寻找的值小于中间值,则右端点移到中位置-1;
int dichotomy(int n,int a[],int x)
{
int left, middle, right;
left = 0;
right = n-1;
while( left <= right )
{
middle = ( left + right ) / 2;
if(a[middle]==x)
return middle;
else
if(x>a[middle])
left = middle + 1;
else
right = middle - 1;
}
return left;
}
例题:
第一行输入n和x
第二行有n个排序好的整数
问x在序列中的位置(x一定在序列中)
如:
10 4
1 2 4 6 7 8 9 11 20 85
3