!!! 快排的主要思想是分治
step1: 确定分界点x=a[l],x=a[r] ,x=a[l+r>>1] 都ok。
step2: 调整区间 将 小于x的都移动到x的左边,大于x的移动到x的右边
step3:递归再次处理上述 [l,x],[x,r]的区间。
#include<iostream>
using namespace std;
const int n =1e6;
int a[n];
void quick_sort(int l,int r)
{
if(l>=r) return ;
int x=a[l+r>>1];
int i=l-1,j=r+1;
while(i<j)
{
do ++i;while(a[i]<x);
do --j;while(a[j]>x);
if(i<j) swap(a[i],a[j]);
}
quick_sort(l,j);
quick_sort(j+1,r);
}
int main()
{
int n;
cin >> n;
for(int i=1;i<=n;i++) cin >> a[i];
quick_sort(1,n);
for(int i=1;i<=n;i++) cout << a[i] << ' ';
}