不完全排序求第k小

2021-08-21 10:44:43 字數 454 閱讀 7875

求第k小的數

排序中求解,但只需部分排序,時間複雜度o(n)。

正常做法是把序列拍個序,然後直接輸出位置為k的即可。但實際上沒有必要使所有子串行都有序,只要讓包含第k小的數的序列有序即可。

以快速(二分)排序為例,每次選取乙個值,進過一波操作後,y左邊的數小於它,x右邊的數大於它,x和y之間的數(有的話)已經有序了。據此,寫出**。

#include#include#includeusing namespace std;

int a[10010];

int dfs(int l,int r,int k)

}if(k<=y) return dfs(l,y,k);

else if(x<=k) return dfs(x,r,k);

else return a[k];

}int main()

快速排序(求第k小的數)

快排是利用的partition演算法,基本思想是從第乙個數開始,利用partition演算法將這個數在有序序列中的位置找到,這個數的左邊部分都是小於它的數,右邊部分都是大於他的數,然後通過分治的方法對左右兩個區間再進行partition操作,partition演算法 如下 int partition...

求第k小元素

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

求第k小元素的快速排序演算法

name 第k小元素 author date 13 04 17 15 28 description 求一列數中的第k小元素,利用分治的策略進行遞迴求解。模仿快速排序法的思路,只不過每次只遞迴處理第k小元素所在的序列。使用消除尾遞迴優化後效果更好。include include include inc...