二分查詢 非遞迴實現和遞迴實現

2021-09-19 07:51:42 字數 1001 閱讀 1621

二分查詢的條件是對一組有序陣列的查詢,這一點很容易忘記,在使用二分查詢的時候先要對陣列進行排序。

先說一下二分查詢的思路:乙個有序陣列,想要查詢乙個數字key的下標,首先算出中間下標mid,利用mid把這個陣列分為兩半,前一半從下標0到mid-1,後一半從mid+1到陣列最後乙個元素(下標是陣列長度減一)。把這個查詢的元素key和陣列下標為mid的元素進行比較,也就是和中間那個元素進行比較,如果比這個元素的小那麼把查詢範圍縮小到原陣列的前一半(把查詢下標縮短到0到mid-1),如果比中間mid下標元素大那麼範圍就是後半部分(下標為mid+1到陣列長度減一),這樣來回反覆取中間比較最後就會定位到要查詢元素key的下標。

/**

* @param array 運算元組

* @param key 查詢元素

* @return 元素下標

*/public

static

intbinsearch

(int

array,

int key)

else

if(key>array[mid]

)else

}return-1

;}

/**

* @param array 運算元組

* @param key 查詢元素

* @param start 開始下標

* @param end 結束下標

* @return 元素下標

*/public

static

intbinsearch1

(int

array,

int key,

int start,

int end)

else

if(start>=end)

else

if(key>array[mid]

)else

if(key)return-1

;}

二分查詢 非遞迴實現和遞迴實現

二分查詢 演算法思想 又叫折半查詢,要求待查詢的序列有序。每次取中間位置的值與待查關鍵字比較,如果中間位置的值比待查關鍵字大,則在前半部分迴圈這個查詢的過程,如果中間位置的值比待查關鍵字小,則在後半部分迴圈這個查詢的過程。直到查詢到了為止,否則序列中沒有待查的關鍵字。二分查詢的前提是這個陣列是有序的...

二分查詢實現(遞迴和非遞迴)

遞迴的二分查詢,查詢單個值 時間複雜度 log2n 有點像二叉排序樹的查詢 param arr 待查詢陣列,有序 param low param high param findval 待找值 return 待找值的下標,沒有返回 1 public static intbinarysearch int...

二分查詢的遞迴和非遞迴實現

二分查詢的遞迴和非遞迴實現 遞迴實現 時間複雜度 o logn 空間複雜度 o logn int binsearch int arr,int left,int right,int key 遞迴實現二分查詢 if arr mid key if arr mid key return 1 非遞迴實現 時間...