利用快速排序的方法尋找第k小的資料,該方法的時間複雜度平均為o(n),可以滿足一般情況下的查詢演算法
#include
// res代表開始查詢的元素的位址,n代表查詢的範圍,nth代表查詢該範圍內的第nth小的元素
int findnth(int*res,int n,int nth)
int i=0,j=n-1;
int temp=*res;
while (i=temp && ires[i]=temp;
//如果剛好找到該元素則直接返回
if (i==nth-1)
//如果該元素在右邊(即是元素值較大的那邊,修改查詢範圍,在該範圍內尋找第nth-i-1小的元素)
if (i//修改查詢範圍,尋找第nth小的元素
else
}int main()
集合中找K小元素
問題描述 乙個集合滿足如下條件 1 是集合的元素 2 若 p 是集合的元素,則 2 p 1,4 p 5 也是集合的元素。求 此集合中最小的 k 個元素。include using namespace std struct intnode int main 加到鏈末尾 else 加到鏈中 intnod...
求已知N個數中第k小的數
本來今天想寫的是 面試記 八一八hr姐姐和面試官叔叔。但聊到面試難免要聊面試題,而演算法題自是其重中之重。為了日後能專心地八面試官,今天就先說說這個演算法。本篇涉及專業知識,外行止步,發生危險概不負責。問題 random select 求已知n個數中第k小的數。k 先排序再取數的做法需要o n lo...
整數n的倒數第k個數字
time limit 1 sec memory limit 128 mb 64bit io format lld 編寫程式輸出正整數n中從右端開始的第k個數字的值 k從1開始 例如 n 264539,k 3,則輸出5 n 7622,k 6,則輸出 1 注意 main函式已經給定 如下所示 請將程式補...