基於快排思想的第 前 k大 小

2022-02-24 14:28:17 字數 419 閱讀 6682

演算法思路就是根據快排的partition,先隨機選擇乙個分隔元素(或a[0]),將陣列分為[小於a[p]的元素] a[p] [大於a[p]的元素],如果這時候n-p+1等於k的話,a[p]就是所求的第k大,否則如果n-p+1>k,那麼說明第k大元素應該是在[大於a[p]的元素]裡,所以再partition這部分,反之亦然。

一般情況下,演算法複雜度應該是 o(n+n/2+n/4+...)=o(n)

public class kthmax 

a[l]=a[r];

while(lk)else

len=n-p;}}

public static void main(string args) ;

solve(a,2);

sort.print(a);

}}

尋找第K大的數(快排思想)

使用快排思想找第k大的數,演算法複雜度o n 1.以陣列a的第0位a 0 為參考基準base,將陣列劃分為兩個部分 如果找第k大的數,則將大於base的數往前挪,將小於base的數往後挪。如果找第k小的數,則與此相反。劃分過程與快排相同,使用兩個指標i和j分別指向陣列的首尾,根據指標所指元素與基準b...

快排的思想求第K小的數

描述輸入n 個數,m 次查詢。每次查詢給出乙個數x。要求 每次查詢輸出前 x個數中第 i小的數。i為第 i次查詢 你可以假設 m n xi xi 1 xi 2 xm xm n 輸入 line0 t line1 n,m line2 linen 1 num1,numn linen 2 linen 2 m...

快速排序以及基於快排思想的找前k個最大數

1 int partition vector v,int head,int rear 7swap v head v rear 8while v head key head 11swap v rear v head 1213 14 v head key 15 my count 16return hea...