gpt4 book ai didi

c - 快速排序:为什么输出错误

转载 作者:行者123 更新时间:2023-11-30 19:32:17 24 4
gpt4 key购买 nike

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

#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;
}

最佳答案

void swap(int a,int b)

该行将两个参数作为值的副本。交换是在他的副本上完成的。

void swap(int* a, int* b)

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

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

关于c - 快速排序:为什么输出错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47251284/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com