在常见算法中,二分查找法属于比较简单的算法,只要每次取中间值比较就行。但是有一个比较坑逼的地方就是,中间的取值必须要恰当,一不小心就会陷入死循环问题出不来,本人也踩过几次坑。
有一天我突发奇想突然想到了一种彻底解决二分查找算法死循环的解决方法,废话不多说看代码:
public int halfSearch(int[] arr, int num) {
// 判断不为空
if (arr.length == 0) return -1;
// 首位置和最后一个位置
int left = 0, right = arr.length - 1;
int mid;
// 精髓部分,当左右相邻时结束,彻底解决空循环问题
while (left < right-1) {
// 不需要加1
mid = left + ((right - left ) >>>1);
// 最后很有可能在左边
if (arr[mid] <= num) {
left = mid;
} else {
right = mid;
}
}
return arr[left] == num? left:arr[right] == num?right:-1;
}
精髓就在while循环条件中 left < right-1
死循环问题就是因为当