【问题描述】
对待排序序列使用快速排序算法进行排序,计算第一次划分之后分界元素在序列中的位置和最终排序结果(划分和分界元素的概念参照课本)(在序列中的位置跟书上一致,从1而不是从0开始)
【输入形式】
序列元素个数,序列
【输出形式】
第一次划分之后分界元素的位置,最终排序结果
【样例输入】
5 0 2 1 -1 -2
【样例输出】
3 -2 -1 0 1 2
#include <iostream>
using namespace std;
int a[100200];
int f;
int flag = 0;
int partition(int a[],int low,int high){
int pivot = a[low];
while(low < high){
while(low < high && a[high] >= pivot){
--high;
}
a[low] = a[high];
while(low < high && a[low] <= pivot){
++low;
}
a[high] = a[low];
}
a[low] = pivot;
if(!f){
cout << low << " ";
f = 1;
}
return low;
}
void quicksort(int a[],int low,int high){
if(low < high){
flag = 1;
int pos = partition(a,low,high);
quicksort(a,low,pos - 1);
quicksort(a,pos + 1,high);
}
}
int main(){
int n;
cin >> n;
for(int i = 1; i <= n ;i++){
cin >> a[i];
}
quicksort(a,1,n);
if(flag == 0){
cout << 1 << " ";
}
for(int i = 1; i <= n;i++){
cout << a[i] << " ";
}
return 0;
}