陣列第k小的元素

2021-08-29 11:53:38 字數 748 閱讀 8952

要求複雜度在o(n)

kua方法:

使用分治策略,類似與快速排序的方法,先對陣列分組,然後判斷第k小的元素應該在哪個分組

然後遞迴該分組,最後求的第k小的元素

/*使用分段的思想求第k小的數(減治法)

如:第1小的數是最小的數

思想:對於乙個陣列a[0...n-1],分段成a[0...s-1],a[s],a[s+1...n-1]

分組後,a[0...s-1]裡面的元素都小於等於a[s];

a[s+1...n-1]裡面的元素都大於等於a[s];

所以,如果 s==k-1,那麼a[s]就是要求的數;

如果 s>k-1,那麼要求的數在a[0...s-1]裡;

如果 s因此,我們把範圍縮小到 a[0...s-1]或者a[s+1...n-1]裡;

對縮小後的陣列也做同樣的操作;

通常情況下,這個比快速排序要高效:

因為快速排序要同時處理被分割的2段,

而此方法只需要處理一段;

*/實現:

//求陣列中最小的第k的元素,要求時間複雜度o(n)

//原理類似與quicksort,都是分治

//不同在與,mink只需要對其中乙個分組進行遞迴

//該方法最壞複雜度為o(n^2),但是平均複雜度有o(n)

//複雜度取決於基準值的選擇,可以使用隨機選擇基準值

public static int mink(int array, int low, int high, int k)

分治演算法求陣列第k小元素

在 陣列s中查詢第k小的元素並輸出 分治演算法 將s分為多個組q,每組5個元素,有剩餘的話,則排序剩餘元素。將q個組單獨排序,每組找出中項,中項組成集合m,以m中項n作為標準,將s劃分為兩個子陣列s1和s2,把這個陣列中比n小的都放入s1的陣列中,陣列s1的元素個數是 s1 個 把這個陣列中比n大的...

求第k小元素

題目 給定線性序集中n個元素和乙個整數k,其中1 k n,要求找出這n個元素中第k小的元素。如果將這n個元素線性序排列時,如果不存在重複的數或者求第k個元素的時候,那麼第k個位置即為要找的元素。當k 1時,要找的就是最小值 而當k n時,則要找的則是最大值。憑藉著快速排序中的劃分函式,可以實現上面的...

選擇問題 第k小元素

問題描述 在乙個無序的序列t中,尋找第k小的元素 分析 將序列t進行公升序排列,下標為k的元素即為第k小的數。下標從1開始 考慮到快速排序的過程,每次進行一次partition 函式,就將比軸線值小的數放在軸線左邊,比軸線大的值放在軸線右邊,即可確定乙個軸線值的下標位置s。下面分三種情況 1 s k...