这个手写快排的不同点在于:它是以区间中的第一个元素作为关键数据排序的,最后要求输出数列中第 k 小的数和找到这个第 k 小的数时,排序函数递归执行的次数
数据规模与约定:0<k≤n≤106,数列元素的绝对值不大于 106
我的代码如下:
#include <bits/stdc++.h>
using namespace std;
int n, k, a[1000010], ans;
void qsort (int l, int r)
{
int i = l, j = r, key = a[l], change = 0;
while (i <= j)
{
while (a[i] < key) i++;
while (a[j] > key) j--;
if (i <= j)
{
swap (a[i], a[j]);
if (i != j) change = 1;
i++; j--;
}
}
ans += change;
if (l < j) qsort (l, j);
if (i < r) qsort (i, r);
}
int main ( )
{
scanf ("%d %d", &n, &k);
for (int i = 1; i <= n; i++)
scanf ("%d", &a[i]);
qsort (1, n);
cout << a[k] << '\n' << ans << '\n';
return 0;
}
但是运行错误,求调QAQ
违规紫衫