打算重返c/c++陣營,所以準備從演算法開始溫習,今天我們談到的是一種效率較高的查詢方法:二分查詢。
什麼是二分查詢:
二分查詢又稱折半查詢,它是一種效率較高的查詢方法。
二分查詢要求:線性表是有序表,即表中結點按關鍵字有序,並且要用向量作為表的儲存結構。
二分查詢的基本思想是:
(1)首先確定該區間的中點位置(設r[low..high]是當前的查詢區間);
(2)然後將待查的k值與r[mid].key比較:若相等,則查詢成功並返回此位置,否則須確定新的查詢區間,繼續二分查詢(若r[mid].key>k值,則在r[low..mid-1]區間內查詢,反之則在r[mid+1..high]區間內查詢);
二分查詢演算法實現:
high(_src)獲取陣列_src長度,定義如下:
另一種實現(遞迴):
為了方便使用,對入口進行如下封裝:
以上**在均在windows 7/visual c++ 2008和ubuntu 9.10/gcc 4.4.1中除錯通過!
STL中的二分查詢(binary search)
stl中對於有序序列 vector,list等 提供了相當相當強大的二分搜尋binary search演算法。對於可以隨機訪問容器 如vector等 binary search負載度為對數級別 logn 對於非隨機訪問容器 如list 則演算法複雜度為線性。現在簡要介紹一下幾種常用的binary s...
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...
1128 二分 二分查詢
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...