二分查詢演算法java實現

2021-06-20 20:36:08 字數 1523 閱讀 4402

1、演算法概念。

二分查詢演算法也稱為折半搜尋、二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。請注意這種演算法是建立在有序陣列基礎上的。
2、演算法思想。①搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;

②如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。

③如果在某一步驟陣列為空,則代表找不到。

這種搜尋演算法每一次比較都使搜尋範圍縮小一半。

3、實現思路。

①找出位於陣列中間的值,並存放在乙個變數中(為了下面的說明,變數暫時命名為temp);

②需要找到的key和temp進行比較;

③如果key值大於temp,則把陣列中間位置作為下一次計算的起點;重複① ②。

④如果key值小於temp,則把陣列中間位置作為下一次計算的終點;重複① ② ③。

⑤如果key值等於temp,則返回陣列下標,完成查詢。

4、實現**。

/**

* description : 二分查詢。

* @autor kwzhang

* modify :2012-6-29**

@param

* @param

array 需要查詢的有序陣列

* @param

from 起始下標

* @param

to 終止下標

* @param

key 需要查詢的關鍵字

* @return

* @throws

exception

*/public

static

extends comparable> int binarysearch(e array, int from, int to, e key) throws exception

if (from <= to) else

if (temp.compareto(key) < 0) else

}return binarysearch(array, from, to, key);

}

5、測試demo很簡單,這裡就不寫了。

上面這種實現是通過遞迴的方式,各人覺得之類的問題用遞迴比較好理解,而且過程簡單。

下面再來看看非遞迴的方式如何實現。在jdk裡面正好有實現,在此就直接貼上arrays裡面的**。為了簡單起見,我們就只看看int引數的方法:

private

static

int binarysearch0(int a, int fromindex, int toindex, int key)

return -(low + 1); //

key not found.

}

二分查詢演算法(Java實現)

二分查詢測試類 注意 二分查詢必須用在有序列表中進行二分查詢 public class binarychoptest for int i 0 i 10 i sign 1 使用二分查詢和遞迴的結合進行查詢 時間複雜度 o logn param arrays 有序陣列 param target 要查詢的...

演算法 二分查詢演算法(Java實現)

1 前提 二分查詢的前提是需要查詢的陣列必須是已排序的,我們這裡的實現預設為公升序 2 原理 將陣列分為三部分,依次是中值 所謂的中值就是陣列中間位置的那個值 前,中值,中值後 將要查詢的值和陣列的中值進行比較,若小於中值則在中值前面找,若大於中值則在中值後面找,等於中值時直接返回。然後依次是乙個遞...

二分查詢演算法的JAVA實現

二分查詢演算法 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜...