标签:二分查找
算法:当数据量很大时候适合采用该方法。采用二分查找时,数据需要时有序的
基本思想:假设数据是按升序排序的,对于给定值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