代码思路:
1.选取区间内的一个值作为基准X。
2.做一次划分,将区间内比X小的值放在左边,比X值大的数字放在右边。
3.分别对左边右边区间递归执行步骤1和2,直至区间仅有一个元素。
#include <iostream>
using namespace std;
const int N = 100010;
int n,q[N];
void quick_sort(int l,int r,int q[])
{
if(l>=r)
return;
else
{
//在给定区间内选取一个基准
int x = q[(l+r)>>1];
//设定指针对区间做一次划分
int i = l-1;
int j = r+1;
while(i<j)
{
do i++;while(q[i]<x);
do j--;while(q[j]>x);
if(i<j)
{
swap(q[i],q[j]);
}
}
//此次划分之后值为x的元素被确定下来
//q[l,i] <= q[j+1,r]
quick_sort(l,j,q);
quick_sort(j+1,r,q);
//此处划分存在边界问题,暂时记住。
}
}
int main(){
scanf("%d",&n);
for(int i=0;i<n;i++)
{
scanf("%d",&q[i]);
}
quick_sort(0,n-1,q);
for(int i=0;i<n;i++)
{
printf("%d ",q[i]);
}
return 0;
}