1. 程式人生 > >查找算法—折半查找

查找算法—折半查找

del search int end 線性 binarys font else if key 必須

折半查找,又稱為二分查找,它的前提是線性表中的記錄必須是關鍵碼有序(通常是從大到小),線性表必須采用順序存儲。

算法思想:在有序表中,取中間記錄作為比較對象,若給定值與中間記錄的關鍵字相等,則查找成功;

若給定值小於中間記錄的關鍵字,則在中間記錄的左半區繼續查找;

若給定值大於中間記錄的關鍵字,則在中間記錄的右半區繼續查找。

不斷重復上述過程,直到查找成功,或所有查找區域無記錄,查找失敗為止。

具體代碼實現如下:

// 用遞歸實現

int binarySearch(int[] arr ,int start ,int end,int key){

          int mid = (start+end)/2;

if(key == arr[mid]){

            return mid;

          }

          if(start>=end){

            return -1;

          }else if (key > arr[mid]) {

            return binarySearch(arr, mid + 1, end, key);

}

else if (key < arr[mid]) {

                                          return  binarySearch(arr, start, mid - 1, key);
           }

        return -1;

}

折半查找的時間復雜度為o(logn).

查找算法—折半查找