二分法查找算法優化
摘要:使用位運算和減少計算次數的技巧優化二分查找算法。
在《算法——二分法查找》的二分法實現源碼binarySearch_2實現中,可以發現計算了兩次mid,那有沒有辦法計算一次呢?另一方面,位運算min + (max - min) >> 1還有其它等價實現方法嗎?我帶著這兩個質疑寫出了如下的實現方法,使代碼更易讀。
/**
* 根據元素大小進行二分法查找一返回下標
*
* @param arr 數組
* @param key 待匹配的值,看數組中是否存在
* @return key 在數組中的下標,如果是-1,就說明數組中不存在此元素
*/
public static int binarySearch_3(int[] arr, int key) {
// 最小值的下標
int min = 0;
// 最大下標,等于數組長度
int max = arr.length - 1;
while (min <= max) {
int mid = (max + min) >> 1;
if (arr[mid] > key) {
max = mid - 1;
} else if (arr[mid] < key) {
min = mid + 1;
} else {
return mid;
}
}
return -1;
}
瞧一瞧代碼是否變得更簡練了?老鐵,你有更有效的實現策略嗎?評論區等著你呢!
讀后有收獲,小禮物走一走,請作者喝咖啡。
Buy me a coffee. ?Get red packets.作者:樓蘭胡楊
本文版權歸作者和博客園共有,歡迎轉載,但請注明原文鏈接,并保留此段聲明,否則保留追究法律責任的權利。

浙公網安備 33010602011771號