快排总是写不对,想不明白哪里错了,代码如下


#include<iostream>
using namespace std;
const int N=1e6+10;
int n;
int q[N];
void quicksort(int q[],int l,int r)
{
    if(l>=r) return;
    int pivot=q[l],i=l,j=r;
    while(l<r)
    {
        do j--;while(q[j]>pivot);
        do i++;while(q[i]<pivot);
        if(i<j) swap(q[i],q[j]);
    }
    quicksort(q,l,i-1);
    quicksort(q,j+1,r);
}
int main()
{
    scanf("%d",&n);
    for(int i=0;i<n;i++)
    {
        scanf("%d",&q[i]);
    }
    quicksort(q,0,n-1);
    for(int i=0;i<n;i++)
    {
        printf("%2d",q[i]);
    }
    return 0;
}

内循环也要满足外循环的条件,不要用dowhile,用while

img