二分查找
2014-10-22 17:30
253 查看
要准确实现二分查找,首先要把握下面几个要点:
关于right的赋值
right = n-1 => while(left <= right) => right = middle-1;
right = n => while(left < right) => right = middle;
middle的计算不能写在while循环外,否则无法得到更新。
关于right的赋值
right = n-1 => while(left <= right) => right = middle-1;
right = n => while(left < right) => right = middle;
middle的计算不能写在while循环外,否则无法得到更新。
int BinarySearch(int array[], int n, int value) { int left = 0; int right = n - 1; //如果这里是int right = n 的话,那么下面有两处地方需要修改,以保证一一对应: //1、下面循环的条件则是while(left < right) //2、循环内当 array[middle] > value 的时候,right = mid while (left <= right) //循环条件,适时而变 { int middle = left + ((right - left) >> 1); //防止溢出,移位也更高效。同时,每次循环都需要更新。 if (array[middle] > value) { right = middle - 1; //right赋值,适时而变 } else if(array[middle] < value) { left = middle + 1; } else return middle; //可能会有读者认为刚开始时就要判断相等,但毕竟数组中不相等的情况更多 //如果每次循环都判断一下是否相等,将耗费时间 } return -1; }
相关文章推荐
- 最长单调递增子序列(二分查找优化)
- 二分查找(binary search)
- 二分查找的递归算法(附源码)_AX
- 算法回顾(三) 二分查找
- HDU 2141 二分查找
- Google 面试题 第K小的数字 二分逼近&二分查找
- 查找算法:二分查找
- .NET源码中的二分查找实现
- 二分查找
- 二分查找 C 、C++STL
- 二分查找的递归与非递归算法
- 练习 2.3-5 二分查找
- Java学习资料-Java常用算法-二分查找算法
- 二分查找
- 【学习记录】练习题-二分查找
- 二分查找 http://ac.jobdu.com/problem.php?pid=1545
- 查找算法集:顺序查找、二分查找、插值查找、动态查找(数组实现、链表实现)
- 算法导论 查找 二分查找
- 二分查找
- Javascript的冒泡排序和二分查找