java基礎-二分查找算法之JAVA實現

二分查找算法之JAVA實現

1 算法概念。
二分查找算法也稱爲折半搜索、二分搜索,是一種在有序數組中查找某一特定元素的搜索算法。請注意這種算法是建立在有序數組基礎上的。
2 算法思想。
①搜素過程從數組的中間元素開始,如果中間元素正好是要查找的元素,則搜素過程結束;
②如果某一特定元素大於或者小於中間元素,則在數組大於或小於中間元素的那一半中查找,而且跟開始一樣從中間元素開始比較。
③如果在某一步驟數組爲空,則代表找不到。
這種搜索算法每一次比較都使搜索範圍縮小一半。
3 實現思路。
①找出位於數組中間的值,並存放在一個變量中(爲了下面的說明,變量暫時命名爲temp);
②需要找到的key和temp進行比較;
③如果key值大於temp,則把數組中間位置作爲下一次計算的起點;重複① ②。
④如果key值小於temp,則把數組中間位置作爲下一次計算的終點;重複① ② ③。
⑤如果key值等於temp,則返回數組下標,完成查找。
4 實現代碼。

/**
 * @param <E>
 * @param array 需要查找的有序數組
 * @param from 起始下標
 * @param to 終止下標
 * @param key 需要查找的關鍵字
 * @return
 * @throws Exception
 */
public static <E extends Comparable<E>> int binarySearch(E[] array, int from, int to, E key) throws Exception {
	if (from < 0 || to < 0) {
		throw new IllegalArgumentException("params from & length must larger than 0 .");
	}
	if (from <= to) {
		int middle = (from >>> 1) + (to >>> 1); // 右移即除2
		E temp = array[middle];
		if (temp.compareTo(key) > 0) {
			to = middle - 1;
		} else if (temp.compareTo(key) < 0) {
			from = middle + 1;
		} else {
			return middle;
		}
	}
	return binarySearch(array, from, to, key);
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章