1. 程式人生 > 其它 >二分查詢(非遞迴)詳解

二分查詢(非遞迴)詳解

二分查詢(非遞迴)詳解

說明

  1. 二分查詢具有很高的查詢效率,但是要求要查詢的陣列必須是有序的,如果是無序的,在查詢前必須對其進行排序,否則會出問題
  2. 二分查詢採用折半查詢的思路,時間複雜度為對數階,每次都判斷要查詢的值和陣列中間值的大小關係
  3. 如果陣列中間值元素等於要查詢的值,說明找到,直接返回
  4. 如果中間值大於目標值,說明要查詢的元素在中間值的左邊,重置右索引
  5. 否則要查詢的目標值在中間元素的右邊,重置左側索引
  6. 如果查詢完還沒有找到,說明沒有要查詢的值,返回-1
  7. 二分查詢較簡單,但很常用,需熟練
  8. 原始碼見下

原始碼及分析

/**
     * 使用非遞迴的形式實現二分查詢
     * @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;
    }