分治法求第k小元素(vc )

2022-02-25 02:47:00 字數 849 閱讀 8899

演算法:

求一列數中的第k小元素,利用分治的策略進行遞迴求解。

首先隨便指定乙個數,這裡我指定的是第乙個數為第k小元素記為randk,將陣列中其他的數與findk進行比較,比他小的放在左邊,大的放在右邊,如果randk左邊的元素個數為k-1個,說明findk就是你所要找的元素,如果左邊的元素個數》k-1,說明你要找的元素在左邊的數中,繼續使用相同的方法在左邊的數中進行查詢,如果左邊的元素的個數

說明你要找的元素在右邊的數中,則繼續使用相同的辦法在右邊的數中進行查詢。。。

**:#include

#include

#include

#define array_max 200

void swap(int &a,int &b)

void out(int a,int n)

cout<

} int findp(int a,int op,int r)

if(il>=ir) break;

swap(a[il],a[ir]);

} swap(a[op],a[ir]);

return ir;

} int findk(int a,int op,int n,int k)

void main()

cout<<"the random_array_element is:"<

out(a,n);

cout<<"pleae input the k:";

cin>>k;

if(k>n) goto begin;//

輸入錯誤,重新輸入

else

cout<<"the element you find now is:"<

}

分治演算法求第k小元素

1.問題 用分治的演算法求乙個陣列s n 中第k小的元素。2.解析 採取和快速演算法相同的思路,但是結合分治的思想,選取恰當的基準值。找到基準值以後,再按照快速排序的方法進行查詢就好了。3.設計 int r 5int r group ceil high low 1 1.0 r ceil取上限,總共分...

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

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

求第k小元素

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