二分查詢(非遞迴)詳解
阿新 • • 發佈:2021-06-13
二分查詢(非遞迴)詳解
說明
- 二分查詢具有很高的查詢效率,但是要求要查詢的陣列必須是有序的,如果是無序的,在查詢前必須對其進行排序,否則會出問題
- 二分查詢採用折半查詢的思路,時間複雜度為對數階,每次都判斷要查詢的值和陣列中間值的大小關係
- 如果陣列中間值元素等於要查詢的值,說明找到,直接返回
- 如果中間值大於目標值,說明要查詢的元素在中間值的左邊,重置右索引
- 否則要查詢的目標值在中間元素的右邊,重置左側索引
- 如果查詢完還沒有找到,說明沒有要查詢的值,返回-1
- 二分查詢較簡單,但很常用,需熟練
- 原始碼見下
原始碼及分析
/** * 使用非遞迴的形式實現二分查詢 * @param arr 要查詢的陣列 * @param target 要查詢的目標值 * @return 返回查詢的結果 */ public static int binarySearchNoRecursion(int[] arr, int target){ //定義左右指標 int left = 0, right = arr.length - 1; //迴圈查詢 while (left <= right){ //定義中間值索引 int mid = (left + right) / 2; //如果中間值等於target if (arr[mid] == target){ return mid; //否則重置左右指標 }else if (arr[mid] > target){ right = mid - 1; }else { left = mid + 1; } } //如果沒找到返回-1 return -1; }