二分搜尋,也稱折半搜尋、二分查詢,是用來在乙個有序陣列中查詢某一元素的演算法。
以在乙個公升序陣列中查詢乙個數為例。
它每次考察陣列當前部分的中間元素,如果中間元素剛好是要找的,就結束搜尋過程;如果中間元素小於所查詢的值,那麼左側的只會更小,不會有所查詢的元素,只需要到右側去找就好了;如果中間元素大於所查詢的值,同理,右側的只會更大而不會有所查詢的元素,所以只需要到左側去找。
在二分搜尋過程中,每次都把查詢的區間減半,因此對於乙個長度為n的陣列,至多會進行o(logn)次查詢。
//直接二分
int find(int x)
return -1;// not found
}int main()
cout << s << endl;
return 0;
}
迭代二分查詢二分查詢
在寫這篇文章之前,已經寫過了幾篇關於改迭代二分查詢主題的文章,想要了解的朋友可以去翻一下之前的文章 bentley在他的著作 writing correct programs 中寫道,90 的計算機專家不能在2小時內寫出完整確正的二分搜尋演算法。難怪有人說,二分查詢道理單簡,甚至小學生都能明確。不過...
二分查詢與二分答案 A B 數對
出題是一件痛苦的事情!相同的題目看多了也會有審美疲勞,於是我捨棄了大家所熟悉的 a b problem,改用 a b 了哈哈!好吧,題目是這樣的 給出一串數以及乙個數字 c,要求計算出所有 a b c 的數對的個數 不同位置的數字一樣的數對算不同的數對 輸入共兩行。第一行,兩個整數 n,c。第二行,...
1128 二分 二分查詢
時間限制 10000ms 單點時限 1000ms 記憶體限制 256mb 描述nettle最近在玩 艦 因此nettle收集了很多很多的船 這裡我們假設nettle氪了很多金,開了無數個船位 去除掉重複的船之後,還剩下n 1 n 1,000,000 種不同的船。每一艘船有乙個稀有值,任意兩艘船的稀有...