1.問題
用分治的演算法求乙個陣列s[n]中第k小的元素。
2.解析
採取和快速演算法相同的思路,但是結合分治的思想,選取恰當的基準值。
找到基準值以後,再按照快速排序的方法進行查詢就好了。
3.設計
4.分析複雜度為o(n);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)
;
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大的...