c - 快速排序错误。无法修复错误
问题描述
我正在研究 QUICKSORT,我自己编写了整个程序。代码如下
#include<stdio.h>
#include<stdlib.h>
void quicksort(int*,int,int);
int partition(int*,int,int);
swap(int*,int*);
int main()
{
int *arr,n,i;
printf("\nEnter the size of the array");
scanf("%d",&n);
arr=(int*)malloc(n*sizeof(int));
printf("\nEnter the elements of the array one by one");
for(i=0;i<n;i++)
{
scanf("%d",arr+i);
}
quicksort(arr,0,n-1);
printf("\nThe Sorted Array is as follows");
for(i=0;i<n;i++)
{
printf("%d",*(arr+i));
}
return 0;
}
void quicksort(int* arr,int a,int b)
{
int c;
if(a<b)
c=partition(arr,a,b);
quicksort(arr,a,c-1);
quicksort(arr,c+1,b);
}
int partition(int* arr,int a,int b)
{
int x,y,index=*(arr+b);
x=a,y=b-1;
while(x<y)
{
if(*(arr+x)<index)
{
x++;
}
if(index<*(arr+y))
{
y--;
}
swap((arr+x),(arr+y));
}
swap((arr+x),(arr+b));
return x;
}
swap(int *a,int *b)
{
int temp;
temp=*a;
*a=*b;
*b=temp;
}
我试图运行这个程序,但是在数组输入之后它说分段错误。我花了几分钟查看代码并一次又一次地检查代码,但我似乎没有移动任何地方。有人可以告诉我错误在哪里。
解决方案
如果 a 大于或等于 b 会发生什么?这应该解决分割问题。
void quicksort(int* arr, int a, int b) {
int c;
if (a < b) {
c = partition(arr,a,b);
quicksort(arr, a, c-1);
quicksort(arr, c+1, b);
}
}
推荐阅读
- c# - 如何在点网中以编程方式创建超级网格过滤器?
- ansible - 哈希图中的拆分值
- amazon-web-services - AWS 代码构建:是否可以在代码构建日志中突出显示我的红色错误和绿色成功
- angular - ERROR 错误:未捕获(承诺中):TypeError:data.subscribe 不是函数
- ios - 在 Ktor 中为 iOS Http 客户端刷新身份验证令牌
- java - 为什么我的 BitmapFactory.decodeByteArray 函数返回 null?
- spring - 在 Springboot 中将动态创建的元素添加到 REST API
- json - 如何进入我的帖子颤动/REST的详细信息页面?
- javascript - 将 UTC 时间 (HH:MM) 转换为本地时间
- javascript - jquery 是从哪里来的??(导轨)