代码:
#include <iostream>
using namespace std;
int a[5000010];
int ans, k;
int n;
void findkth(int a[], int l, int r) {
if (l == r) {
ans = a[l];
return;
}
int i = l, j = r, flag = a[(l + r) / 2];
do {
while (a[i] < flag)
i++;
while (a[j] > flag)
j--;
if (i <= j) {
swap(a[i], a[j]);
i++;
j--;
}
} while (i <= j);
if (k <= j)
findkth(a, l, j);
else if (i <= k)
findkth(a, i, r);
else
findkth(a, j + 1, i - 1);
}
int main() {
int n;
cin >> n >> k;
for (int i = 0; i < n; i++)
cin >> a[i];
findkth(a, 0, n - 1);
cout << ans;
return 0;
}
是《深入浅出》上的代码,但是最后一个点会TLE。
是我的main函数有问题导致过不去,还是书上代码有问题?还请各位dalao指教!