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...