第k小的數1 優化O n

2021-07-24 18:17:55 字數 558 閱讀 2109

1.對陣列a每5個分一組

2.對[n/5]個組的數進行組內排序

3.選擇沒組的中位數,將每組的中位數依次交換到陣列的最前面此時a[0~(end-start)/5-a]中存的是這些中位數

4.對a[0~(end-start)/5-a]個中位數進行排序,這些中位數中的中位數為x

5.以x為基準進行二分,比較,遞迴   此時時間複雜度為o(n)

**如下:

#include#includeusing namespace std;

int a[100001],k,b[100001],m,i;//a為待處理陣列 b為原陣列

void operation(int start,int end)

else j--;

} else if(a[i]>m>>k;

for(i=1;i<=m;i++)

for(i=6;i<=m+1;i+=5)

for(i=1;i<=m/5;i++)

operation(1,m);

return 0;

}

第k小的數

輸入n個整數和乙個正整數k 1 k n 輸出這些整數從小到大排序後的第k個 思路1 最容易想到的方法 先對這個序列從小到大排序,然後輸出前面的最小的k個數即可。如果選擇快速排序法來進行排序,則時間複雜度 o n logn class solution 時間複雜度o nlogn 思路2 在思路1的基礎...

第k小的數

time limit 5000 ms memory limit 65536 kib problem description 現有乙個包含n個整數 1 n 10000000 的無序序列 保證序列內元素各不相同 輸入乙個整數k 1 k n 請用較快的方式找出該序列的第k小數並輸出。input 多組輸入。...

第k小的數

time limit 5000 ms memory limit 65536 kib submit statistic problem description 現有乙個包含n個整數 1 n 10000000 的無序序列 保證序列內元素各不相同 輸入乙個整數k 1 k n 請用較快的方式找出該序列的第k...