【问题描述】
给定一组正整数序列(最多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(回车),故要用此方法读入,此方法在本地无效。