算法思想
1.确定分界点 q[l],q[r],q[l+r>>1]
2.调整区间(分界点x的左段和右段)
3.递归处理切开的左右两段
void quick_sort(int q[],int l,int r){
if(l>=r)return;//左右边界交叉直接退出
int i=l-1,j=r+1,x=q[l+r>>1];//先做移动,再比较,因此i为左边界前一个下标值,j为右边界后一个下标值
while(i<j){
do i++;while(q[i]<x);//循环停下时,q[i]的值大等于x,q[i]的值应该被放置到位置x的右边
do j--;while(q[j]>x);//循环停下时,q[j]的值小等于x,q[j]的值应该被放置到位置x的左边
if(i<j)swap(q[i],q[j]);//如果位置i在位置j的左边,即相当于q[i]>x且在x的右边,同理q[j],则应交换两数,让大于x的数在分界点右边,小于x的数在分界点左边
}
//分治处理 此处j替换为i-1、j+1替换成i亦可(对称同理)
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}