分治演算法求第k小元素

2021-10-23 03:41:22 字數 850 閱讀 1619

1.問題

用分治的演算法求乙個陣列s[n]中第k小的元素。

2.解析

採取和快速演算法相同的思路,但是結合分治的思想,選取恰當的基準值。

找到基準值以後,再按照快速排序的方法進行查詢就好了。

3.設計

int r =

5int r_group =

ceil

((high - low +1)

*1.0

/ r)

;//ceil取上限,總共分為r_group個組

//計算每個分組中值,存於a最前面

for(

int i =

1; i <= r_group;

++i)

//獲得每個組的中值的中值(並置於a[low]位置,方便呼叫快排劃分函式)

sort

(&a[low]

,&a[low + r_group]);

swap

(a[low]

, a[r_group /2]

);intpartition

(int a,

int low,

int high);

int cur =

partition

(a, low, high)

;

4.分析複雜度為o(n);

5.原始碼

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

演算法 求一列數中的第k小元素,利用分治的策略進行遞迴求解。首先隨便指定乙個數,這裡我指定的是第乙個數為第k小元素記為randk,將陣列中其他的數與findk進行比較,比他小的放在左邊,大的放在右邊,如果randk左邊的元素個數為k 1個,說明findk就是你所要找的元素,如果左邊的元素個數 k 1...

分治演算法四(查詢第K小元素)

1.問題描述 對於乙個非有序的陣列a start.end 求陣列中第k小的元素 2.解決思路 最直觀的的方式,先對陣列排序,複雜度為o nlgn 但是這樣複雜度太大,可以利用快速排序的思路,解決這個問題,並且複雜度為o n 關鍵在於劃分只乙個部分,我們知道快速排序選擇乙個pivot對陣列進行劃分,左...

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

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