彬腾向前冲 @ 2021-08-17 21:07:35
#include <bits/stdc++.h>
using namespace std;
int q[50000001];
int n,k;
void quick_sort(int q[], int l, int r)
{
if (l >= r) return;
int i = l - 1, j = r + 1, x = q[(l + r )>> 1];
while (i < j)
{
do i ++ ; while (q[i] < x);
do j -- ; while (q[j] > x);
if (i < j) swap(q[i], q[j]);
}
quick_sort(q, l, j), quick_sort(q, j + 1, r);
}
int main ()
{
cin >> n >> k;
for (int i = 0 ; i < n ; i ++) cin >> q[i];
quick_sort (q,0,n-1);
cout << q[k];
}
为什么快排都能tle
by Avengers__lsw @ 2021-12-12 00:46:46
@Mr_ZZzz 好像不行,我用的裸快排加scanf和printf还是超时了,归并和快排都不行
by Mr_ZZzz @ 2021-12-24 00:29:58
@Avengers__lsw
现在再看这个问题的时候豁然开朗了。
这题是快选,快选的做法是快排中只取其中一个区间进行递归排序,因为可以确定我要的数肯定不在另一个区间里。
所以快选的时间复杂度是快排的一半。
所以我觉得对整个数列进行排序的算法应该都会被卡。