選擇問題 第k小元素

2021-07-10 18:45:32 字數 819 閱讀 9457

問題描述:

在乙個無序的序列t中,尋找第k小的元素;

分析:

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

1:s==k 即已經找到下表為k的數,return t[s];

2 : s < k 即第k小值在軸線右邊;

3:s > k 即第k小值在軸線左邊;

再到相應的區間查詢即可快速找到結果。

**:

#include 

using

namespace

std;

int partition(int r,int low,int high);

int selectmink(int a,int low,int high,int k);

int main()

int partition(int a,int low,int high)

while(iif(iint t=a[i];

a[i]=a[j];

a[j]=t;

j--;}}

return i;

}int selectmink(int a,int low,int high,int k)

else

return selectmink(a,low,s-1,k);

}

選擇問題(第k小元素)(分治法)

selection algorithm 選擇問題即第k小元素問題。解決該問題的基本思想與快速排序演算法相同,通過選擇基元進行劃分,從而知道第k小元素在 原始資料使用隨機函式生成。採用結構化程式設計,可以很容易改為從標準輸入或檔案讀入資料,只需要修改函式getdata即可。資料個數由巨集定義給出,也可...

求第k小元素

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

陣列第k小的元素

要求複雜度在o n kua方法 使用分治策略,類似與快速排序的方法,先對陣列分組,然後判斷第k小的元素應該在哪個分組 然後遞迴該分組,最後求的第k小的元素 使用分段的思想求第k小的數 減治法 如 第1小的數是最小的數 思想 對於乙個陣列a 0.n 1 分段成a 0.s 1 a s a s 1.n 1...