首页 > 其他 > 详细

二分查找

时间:2016-07-01 16:30:47      阅读:105      评论:0      收藏:0      [点我收藏+]

算法:当数据量很大时候适合采用该方法。采用二分查找时,数据需要时有序的

基本思想:假设数据是按升序排序的,对于给定值x,从序列的中间位置开始比较,如果当前位置值等于x,则查找成功;若小于当前位置值,则在数列的前半段中查找;若大于当前位置值 则在数列的后半段中继续查找,知道找到为止。


根据算法思想,有下面代码

int bin_search(int a[], int key,int left, int right)
{
	while (left <= right)
	{
		int mid =(left + right)/2;
		if (a[mid] > key)
		{
			right = mid-1;
		}
		else if (a[mid] < key)
		{
			left = mid+1;
		}
		else if(a[mid] == key)
		{
			return mid;
		}
	}
	return -1;
}

上面代码中有一个小小的问题,如果left与right之和超过了所在类型的表示范围的话,mid就不会得到正确的值,可能会导致溢出,什么办法会保证代码比较安全呢?我们可以这样定义并初始化:

int mid = left-(left-right)/2;


当然,我们知道表达式除以2就相当于把二进制位右移一位,所以也可以这样来写:

int mid = left-(left-right)>>1;

这样的写法会让效率更高一些



本文出自 “岁月静好” 博客,请务必保留此出处http://01160529.blog.51cto.com/11479142/1794899

二分查找

原文:http://01160529.blog.51cto.com/11479142/1794899

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!