二分查找是在有序表中查找某一数据用的比较频繁的算法。时间复杂度是O(logn)。
譬如在数组{1,2,3,4,5,6,7,8,9}中查找元素6,则使用二分查找算法的话,执行顺序为:
1 第一步查找中间元素,即是5,将6与5进行比较,得出5<6,则6必然在5之后的那一部分,那么就在这一部分开始寻找;
2 第二步查找{6,7,8,9}的中间元素,即是7,将6与7比较,得出7>6;则6必然在7左边的部分,则在这部分寻找;
3 第三步在{6}中寻找,一下就找到了。
代码如下,返回的是查到的元素在原数组中的位置。找不到返回-1。
int B_find(int a[],int length,int k)
{
if(k>=length)
return -1;
int low=0;
int high=length-1;
while(low<=high)
{
int mid=(low+high)/2;
if(a[mid]==k)
return mid;
else if(a[mid]>k)
high=mid-1;
else if(a[mid<k])
low=mid+1;
}
return -1;
}