(分段错误)c中快速排序代码中的堆芯转储
我已经为快速排序编写了代码。它在某些情况下运行良好,但在大多数情况下会导致核心转储问题。大多数情况下是长输入>10,已经是大排序数组。为什么会这样 这是我的密码(分段错误)c中快速排序代码中的堆芯转储,c,C,我已经为快速排序编写了代码。它在某些情况下运行良好,但在大多数情况下会导致核心转储问题。大多数情况下是长输入>10,已经是大排序数组。为什么会这样 这是我的密码 #include<stdio.h> void quicksort(int arr[],int s,int l) { int temp; if(l-s <= 1) return ; int i=s+1,j=s+1; for(i;i<l;i++) { i
#include<stdio.h>
void quicksort(int arr[],int s,int l)
{
int temp;
if(l-s <= 1) return ;
int i=s+1,j=s+1;
for(i;i<l;i++)
{
if(arr[i]<=arr[s])
{
temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
j++;
}
}
temp = arr[j-1];
arr[j-1] = arr[s];
arr[s] = temp;
quicksort(arr,s,j);
quicksort(arr,j,l);
}
int main()
{
int arr[50],n,i;
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&arr[i]);
quicksort(arr,0,n);
for(i=0;i<n;i++)
printf("\n%d\n",arr[i]);
}
#包括
无效快速排序(int arr[],int s,int l)
{
内部温度;
如果(l-s纠正该行(删除“=”)
if(arr[i]更正行(删除“=”)
if(arr[i]向我们展示您是否使用了调试器来尝试自己查找问题?至少它会告诉您导致segv的代码行,甚至是printf调试语句。如果您已经这样做了,请提供结果。您运行该调试器时,n
最多为50?除了缺少检查>n
不超过50我觉得你的代码很好。但是最好使用有意义的变量名!显示导致崩溃的最小样本数据集…向我们显示你是否使用了调试器来尝试自己查找问题?至少它会告诉你导致segv的代码行。甚至还有printf调试语句。如果你有e已经这样做了,那么请提供结果。您运行时,n
最多为50?除了缺少检查,n
不超过50之外,您的代码对我来说很好。但是最好使用有意义的变量名!显示导致崩溃的最小样本数据集…您能详细说明一下为什么会这样吗它将进入一个无限循环?这一更改肯定使代码对我起作用,在以前崩溃的7个数字集上,以及在其他以前崩溃的多达20个随机元素集上。当任何数字重复时,都会生成core。这个问题也可能发生在两个数字上。首先输入2,然后给出1和1,您可以看到core是一段时间后生成。2输入和两者都是一种情况,首先调用快速排序(arr,0,n);在这种情况下,当调用快速排序(arr,s,j)时,s=0和l=2;s=0和j=2,因此使用相同的参数调用函数quicksort,因此它将永远重复…请您详细说明一下为什么它会进入无限循环?这一更改确实使代码对我起作用,在以前崩溃的7个数字集上,以及在其他以前崩溃的多达20个随机元素集上。核心是ge当您重复任何数字时会生成。此问题也可能发生在两个数字上。首先输入2,然后给出1和1,您可以看到在一段时间后会生成core。2输入和两者都是一种情况,首先调用快速排序(arr,0,n);在这种情况下,当您调用快速排序(arr,s,j)时,s=0和l=2;s=0和j=2,因此使用相同的参数调用函数quicksort,因此它将永远重复。。。。
if(arr[i]<=arr[s])
if(arr[i]<arr[s])