3
作者:
xxdmd8
,
2024-12-18 16:32:59
,
所有人可见
,
阅读 3
快速排序左右区间序列显示
【问题描述】给定一组正整数序列(最多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
#include<iostream>
using namespace std;
int partition(int arr[],int l,int r){
int pivot = arr[l];
int i = l,j = r;
while(true){
while(i <= r && arr[i] < pivot) i ++;
while(j >= l && arr[j] > pivot) j --;
if(i >= j) return j;
swap(arr[i], arr[j]);
}
}
int main(){
int a[20];
int n,pivotIndex;
for(n = 0;cin >> a[n] && n < 20;n ++);
n --;
pivotIndex = partition(a, 0,n - 1);
bool leftEmpty = true, rightEmpty = (pivotIndex == n - 1);
for(int i = 0;i < n;i ++){
if(i < pivotIndex && leftEmpty){
leftEmpty = false;
}
}
if(leftEmpty) cout << "-";
else{
for(int i = 0;i < pivotIndex;i ++){
if(i > 0) cout << " ";
cout << a[i];
}
}
cout << "/";
if(pivotIndex == n - 1) cout << "-";
else{
for(int i = pivotIndex + 1;i <= n;i ++){
if(i > pivotIndex + 1) cout << " ";
cout << a[i];
}
}
cout << endl;
return 0;
}