快速排序逻辑无法正常工作

时间:2013-11-28 10:01:20

标签: c quicksort

以下是quicksort的代码,我发了..但是有些错误,这给了我错误的输出。对于整数数组[65,70,75,80,85,60,55,50,45],我得到的输出是 [45 50 55 65 60 70 75 80 85],这显然是错的。

int partition(int *b,int r,int s)
{
    int pivot=b[r];
    int i,j;
    i=r;
    j=s;
    while(i<=j)
    {
        while(b[i]<=pivot)
            i++;
        while(b[j]>=pivot)
            j--;
        if(i<j)
        {
            int temp;
            temp=b[i];
            b[i]=b[j];
            b[j]=temp;
        }
    }
    b[r]=b[j];
    b[j]=pivot;
    return j;
}
void quicksort(int *a,int p,int q)
{

    if(p<q)
    {
        int j;
        j=partition(a,p,q);
        quicksort(a,p,j-1);
        quicksort(a,j+1,q);

    }
}
int main()
{
    int arr[9]={65,70,75,80,85,60,55,50,45};
    quicksort(arr,0,8);
    for(int i=0;i<9;i++)
        printf("%d ",arr[i]);
    getch();
    return 0;
}

有人可以提出我的错误吗?

1 个答案:

答案 0 :(得分:0)

你应该检查一下你是不是越界了。 另外我认为你应该使用严格的比较。您当前的代码将无法对[1, 2]进行排序(最后一次交换会使其混乱)。

最后一次交换似乎有点武断,不应该需要它。