1、演算法概念。
二分查詢演算法也稱為折半搜尋、二分搜尋,是一種在有序陣列中查詢某一特定元素的搜尋演算法。請注意這種演算法是建立在有序陣列基礎上的。2、演算法思想。①搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束;
②如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。
③如果在某一步驟陣列為空,則代表找不到。
這種搜尋演算法每一次比較都使搜尋範圍縮小一半。
3、實現思路。
①找出位於陣列中間的值,並存放在乙個變數中(為了下面的說明,變數暫時命名為temp);
②需要找到的key和temp進行比較;
③如果key值大於temp,則把陣列中間位置作為下一次計算的起點;重複① ②。
④如果key值小於temp,則把陣列中間位置作為下一次計算的終點;重複① ② ③。
⑤如果key值等於temp,則返回陣列下標,完成查詢。
4、實現**。
/**5、測試demo很簡單,這裡就不寫了。* 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);
}
上面這種實現是通過遞迴的方式,各人覺得之類的問題用遞迴比較好理解,而且過程簡單。
下面再來看看非遞迴的方式如何實現。在jdk裡面正好有實現,在此就直接貼上arrays裡面的**。為了簡單起見,我們就只看看int引數的方法:
privatestatic
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實現
二分查詢演算法 是一種在有序陣列中查詢某一特定元素的搜尋演算法。搜素過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則搜素過程結束 如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。這種搜...