設有一組n個數,要確定其中第k個最大者,這稱為選擇問題(selection problem).
該問題的一種解法是將這n個數讀進乙個陣列中,再通過某種簡單的演算法,比如氣泡排序,以遞減順序將陣列排序,然後返回位置k上的元素。
更好一點的演算法可以先把前k哥元素讀入陣列中並(以遞減的方式)進行排序。接著將剩下的元素逐個讀入。當讀到乙個新元素時,如果該元素小於陣列中第k個元素則忽略之,否則就將其放到陣列中的正確位置上,同時將陣列中的乙個元素擠出陣列。當演算法終止時,返回第k個位置上的元素作為答案。
冒泡法排序:
#include void bubblesort(int array,int n); void printarray(int array,int n); void main() ; bubblesort(array,6); printarray(array,6); } void bubblesort(int array,int n) { for(int i=0;i氣泡排序效率分析,若初始序列為「正序」序列,則只需進行一趟排序,在排序過程中進行n-1次關鍵字的比較,且不移動記錄。反之若初始序列為「逆序」,則進行n-1趟排序,需進行(2~i=n)∑(i-1)=n(n-1)/2,最壞的時間複雜度是o(n ^2)
乙個關於選擇的小問題
以前看過這樣乙個問題 乙個人參加有獎答題,主持人給出了a b c三個選項。這個不知道問題的答案,就隨便選了乙個選項。然後主持人排除了剩下兩個答案中的乙個,告訴這個人有一次改變自己選項的機會。請問 這時候這個人該不該改變自己的選項?剛看到這個問題,我的第一反映是完全沒必要,因為既然排除了乙個錯誤選項,...
乙個執行緒死鎖問題的分析
客戶報過來乙個問題,伺服器執行一周左右就會停止響應,有時候甚至兩天就不響應了,併發使用者量並不大,重啟服務後又工作正常。每當遇到這種問題時就有點兒棘手。一是這種問題的復現條件不好確定,另一方面,即使確定了條件,對於多執行緒的服務程式,也不好除錯。我遇到過的這種問題,大部分是靠讀 分析出來乙個可能的原...
乙個詭異的MySQL索引選擇問題
表結構及資料量 create table tb habit log total totalid int 11 not null auto increment,openid varchar 100 collate utf8mb4 unicode ci not null default habitid ...