我想使用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;
}
答案 0 :(得分:0)
void swap(int a,int b)
此行将两个参数作为值的副本。交换是在副本上进行的。
void swap(int* a, int* b)
这是通过引用传递参数的C风格。您需要传递引用:
swap(&a[i], &a[j]);