点击本链接先学习二分查找基础版
二分查找改良版算法思想
算法实现
public static int binarySearchBalance(int a[],int target) {int i=0,j=a.length;while(j-i>1) {int m=(i+j)>>>1;if(target<a[m]) {j=m;}else { //包括a[m]<target和a[m]=targeti=m; //所以m不可以被排除了,i不能等于m+1}}if(a[i]==target){return i;}return -1;}
优缺点
优点:比较次数减少
缺点:无论目标值在数组的什么位置,循环的次数都不变,会一直运行直到j-i>1,即只剩余i这个位置的值有效之后退出
和之前的方法对比
为什么三种方法的循环条件不同
- i和j都有效时,需要j>i退出循环,即已经没有任何有效的值,i=j时还有一个有效值
- i有效,j无效时,需要j>=i退出循环
- i有效,j无效但平衡版,需要留存一个有效值用于退出循环后和target比较,所以j-i>1,留出a[i]这个有效值