快速排序左右区间序列显示

cg

【问题描述】

给定一组正整数序列(最多20个正整数序列),利用快速排序算法从小到大排序,输出第一趟排序后的左子区间序列和右子区间序列,中间用’/‘分隔。如果左子区间序列或右子区间序列为空,则相应的空序列用’-'表示。

【输入形式】

正整数序列,以空格分隔,回车结束。

【输出形式】

左子区间序列 / 右子区间序列,数值之间以空格分隔,左右序列之间以’/‘分隔,空序列用’-'表示。

【样例输入】

49 38 65 97 76 13 27 49

【样例输出】

27 38 13/76 97 65 49

【样例输入】

13 38 65 97 76 27 49

【样例输出】

-/38 65 97 76 27 49

C++代码

#include<iostream>
using namespace std;
void Quicksortonce(int l, int r, int A[], int& flag) {
	int left = l, right = r, x = A[l];
	while (left < right) {
		while (left < right && A[right] >= x)  right--;
		if (left < right)  swap(A[left++], A[right]);
		while (left < right && A[left] < x)  left++;
		if (left < right)  swap(A[left], A[right--]);
	}
	flag = left;
}
int main() {
	int A[20], flag, cnt = 0;
	while (cin >> A[cnt++]);
	cnt--;
	Quicksortonce(0, cnt - 1, A, flag);
	for (int i = 0; i < cnt; i++) {
		if (i == flag) {
			if (i == 0)  cout << "-";
			cout << "/";
			if (i == cnt - 1)  cout << "-";
		}
		else if (i + 1 == flag)  cout << A[i];
		else cout << A[i] << " ";
	}
	return 0;
}

注:Cg系统第一组测试没有录入\n(回车),故要用此方法读入,此方法在本地无效。

  • 2
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

M_blueberry

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值