代码:
#include<iostream>
using namespace std;
const int N=10010;
int q[N]
void quick_sort(int q[],int l,int r)
{
if(l>=r)return;//left大于right,退出。
//第一步:将问题拆分:以q[x]大小为标准分为俩部分
int i=l-1,j=r+1,x=l+r>>1;
while(i<j)
{
//分为左边小于q[x],右边大于q[x];
do i++;while(q[i]<q[x]);
do j--;while(q[j]>q[x]);
//此时q[i]>=q[x]&&q[j]<=q[x];
if(i<=j)swap(q[i],q[j]);
}
//因为i >= j,q[l..i] <= q[x], q[j..r] >= q[x] 1.i>j 2.i=j
//第二步:递归处理子问题:排序左右俩边
//同杨把每一个子问题分成俩部分并进行排序
quick_sort(q,l,j),quick_sort(q,j+1,r);
//递归将子问题无限分解,完成排序
//第三步:将子问题合并
}
int main()
{
cin>>n;
for(int i=0;i<n;i++)
{
cin>>q[i];
}
quick_sort(q,0,n-1);
for(int i=0;i<n;i++)
{
cout<<q[i]<<' ';
}
}