求助手写快排
  • 板块灌水区
  • 楼主My_Xuan
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/11/6 18:17
  • 上次更新2023/10/27 04:01:36
查看原帖
求助手写快排
679265
My_Xuan楼主2022/11/6 18:17

这个手写快排的不同点在于:它是以区间中的第一个元素作为关键数据排序的,最后要求输出数列中第 kk 小的数和找到这个第 kk 小的数时,排序函数递归执行的次数

数据规模与约定:0<kn1060 < k ≤ n ≤ 10 ^ 6,数列元素的绝对值不大于 10610^6

我的代码如下:

#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

违规紫衫

2022/11/6 18:17
加载中...