查找算法—折半查找
折半查找,又稱為二分查找,它的前提是線性表中的記錄必須是關鍵碼有序(通常是從大到小),線性表必須采用順序存儲。
算法思想:在有序表中,取中間記錄作為比較對象,若給定值與中間記錄的關鍵字相等,則查找成功;
若給定值小於中間記錄的關鍵字,則在中間記錄的左半區繼續查找;
若給定值大於中間記錄的關鍵字,則在中間記錄的右半區繼續查找。
不斷重復上述過程,直到查找成功,或所有查找區域無記錄,查找失敗為止。
具體代碼實現如下:
// 用遞歸實現
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);
}
return binarySearch(arr, start, mid - 1, key);
}
return -1;
}
折半查找的時間復雜度為o(logn).
查找算法—折半查找