#include<iostream>
using namespace std;
void quicksort(int *a,int n)
{
if(n<=1)//递归终止条件
return;
//按最坏可能,为两个子数组分配空间
int *left=new int[n];
int *right=new int[n];
//设置两个子数组长度的初值为0
int nl=0,nr=0;
//1.拆分,左半部分逗比参照元素小
//右半部分逗比参照元素大
int x=a[n-1];
for(int i=0;i<n-1;i++)
{
if(a[i]<=x)//比参照元素小,放在left
left[nl++]=a[i];
else right[nr++]=a[i];
}
//2.对子数组进行排序,递归求解
quicksort(left,nl);
quicksort(right,nr);
//3.合并子数组
int k=0;
//左半区间的元素全部放到数组a中
for(int i=0;i<nl;i++)
a[k++]=left[i];
a[k++]=x;//放参照元素
for(int i=0;i<nr;i++)
a[k++]=right[i];
//4.释放空间
delete[] left;
delete[] right;
}
void print(int *a,int n)
{
for(int i=0;i<n;i++)
cout<<a[i]<<' ';
cout<<endl;
}
int main()
{
int a[]={4,1,10,15,37,79,24,11,91,2,18,9,45,21,52,83,98,90};
int n=sizeof(a)/sizeof(*a);
quicksort(a,n);
print(a,n);
return 0;
}