码迷,mamicode.com
首页 > 其他好文 > 详细

二分查找

时间:2016-07-01 16:32:16      阅读:133      评论: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
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!