1. 程式人生 > >二分查詢演算法

二分查詢演算法

1.二分查詢又稱折半查詢,它是一種效率較高的查詢方法。

2.二分查詢要求:(1)必須採用順序儲存結構 (2).必須按關鍵字大小有序排列

3.原理:將陣列分為三部分,依次是中值(所謂的中值就是陣列中間位置的那個值)前,中值,中值後;將要查詢的值和陣列的中值進行比較,若小於中值則在中值前 面找,若大於中值則在中值後面找,等於中值時直接返回。然後依次是一個遞迴過程,將前半部分或者後半部分繼續分解為三部分。

迭代:

public static int binarySearch(int[] arr, int target) {
    int left = 0;
    int right = arr.length - 1;
    while(left < right){
        int mid = left + (right - left) / 2;
        if(arr[mid] == target){
            return mid;
        }else if(arr[mid] > target){
            right = mid - 1;
        }else{
            left = mid + 1;
        }     
    }
    return -1;
}

遞迴:

 public static int binSearch(int arr[], int left, int end, int right) {   
     int mid = (right- left) / 2 + left;   
     if (array[mid] == key) {   
        return mid;   
      }   
      if (left>= right) {   
        return -1;   
      } else if (key > array[mid]) {   
        return binSearch(array, mid + 1, end, right);   
      } else if (key < array[mid]) {   
        return binSearch(array, left, mid - 1, key);   
      }   
      return -1;   
}