Quicksort:为什么输出错误

时间:2017-11-12 16:42:35

标签: c sorting quicksort

我想使用quicksort对给定的数组进行排序。 所以我在c中为快速排序算法编写了这段代码,但它没有给我正确答案。它给了我与输入相同的输出。  例如:如果我输入为  3  2  1 那就是给予 输出: 3 2 1 请帮忙告诉我错误在哪里。

#include<stdio.h>
void quicksort(int a[],int p,int r);
int partition(int a[],int p,int r);
void swap(int a,int b);
int main()
{
    int n,i,p,r;
    printf("ENter no of elements");
    scanf("%d",&n);
    int a[n];
    printf("ENter the elements");
    for(i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
    }
    p=1;
    r=n;
    quicksort(a,1,n);
    printf("\n");
    for(i=1;i<=n;i++)
    {
        printf("%d\n",a[i]);
    }
    return 0;
}
void quicksort(int a[],int p,int r)
{
    int q;
    if(p<r)
    {
    q = partition(a,p,r);
    quicksort(a,p,q-1);
    quicksort(a,q+1,r); 
    }

}
int partition(int a[],int p,int r)
{
    int x,i,j;
    x=a[r];
    i=p-1;
    for(j=p;j<=r-1;j++)
    {
        if(a[j]<=x)
        {
            i=i+1;
            swap(a[i],a[j]);
        }
    }
    swap(a[i+1],a[r]);

    return (i+1);
}
    void swap(int a,int b)
{
    int t;
    t=a;
    a=b;
    b=t;
}

1 个答案:

答案 0 :(得分:0)

void swap(int a,int b)

此行将两个参数作为值的副本。交换是在副本上进行的。

void swap(int* a, int* b)

这是通过引用传递参数的C风格。您需要传递引用:

swap(&a[i], &a[j]);