參考:
原始碼:目錄:順序查詢
二分查詢
插值查詢
斐波那契查詢
分塊查詢
雜湊查詢
二叉樹查詢
紅黑樹查詢
演算法簡介
二分查詢(binary search),是一種在有序陣列中查詢某一特定元素的查詢演算法。查詢過程從陣列的中間元素開始,如果中間元素正好是要查詢的元素,則查詢過程結束;如果某一特定元素大於或者小於中間元素,則在陣列大於或小於中間元素的那一半中查詢,而且跟開始一樣從中間元素開始比較。如果在某一步驟陣列為空,則代表找不到。
這種查詢演算法每一次比較都使查詢範圍縮小一半。
演算法描述
給予乙個包含n個帶值元素的陣列a
1、 令 l為0 , r為 n-1 ;
2、 如果l>r,則搜尋以失敗告終 ;
3、 令 m (中間值元素)為 ⌊(l+r)/2⌋;
4、 如果 amt,令 r為 m - 1 並回到步驟二;
複雜度分析
時間複雜度:折半搜尋每次把搜尋區域減少一半,時間複雜度為 o(logn)
空間複雜度:o(1)
演算法實現
/**
* 非遞迴寫法
* @param list
* @param selectvalue
* @return
*/private static int select2(listlist, int selectvalue)
int start = 0;
int end = list.size() - 1;
while (end > start) else if (list.get(middleindex) < selectvalue) else
}return -1;
}/**
* 遞迴寫法
* @param list
* @param selectvalue
* @return
*/private static int select(listlist, int selectvalue)
return loopselect(list, 0, list.size() - 1 , selectvalue);
}private static int loopselect(listlist, int startindex, int endindex, int selectvalue)
int middleindex = (endindex + startindex)/2;
if (list.get(middleindex) > selectvalue)else if (list.get(middleindex) < selectvalue)
return middleindex;
}
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...
查詢 二分查詢
二分查詢也稱折半查詢 binary search 它是一種效率較高的查詢方法。但是,折半查詢要求線性表必須採用順序儲存結構,而且表中元素 按關鍵字有序排列 首先,假設表中元素是按 公升序排列 將表中間位置記錄的 關鍵字與查詢關鍵字比較,如果兩者相等,則查詢成功 否則利用中間位置 記錄將表分成前 後兩...
查詢 二分查詢
二分查詢也叫做折半查詢,查詢的物件是已經排好序的序列 一般預設為公升序 讓我們來看看原理 顧名思義,就是先將中間數和目標key比較,如果相等則返回其索引,否則把序列分成兩半,根據大小判斷所查詢的key在哪一半中,對這一半序列再重複上述步驟,直到找到目標key或查詢完序列。被查詢的序列arr中無重複的...