模板:
void quick_sort(int q[],int l,int r)
{
if(l>=r)return ;
int x=q[r+l>>1],i=l-1,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]);
}
quick_sort(q,l,j);
quick_sort(q,j+1,r);
}
主要思想:
1.先选择一个点x做划分,使得左边的值都是小于等于x点的值,右边都大于等于x的值
2.用两指针分别指向左右端点
3.如果左指针对应的值小于标记点x的值,则左指针右移,否则暂停在当前位置
4.如果右指针对应的值大于标记点x的值,则右指针左移,否则暂停在当前位置,并且交换左右指针的值。
建议 x=q[l+r>>1],i=l-1,r=j+1;
注意边界问题