(分段错误)c中的quicksort代码中的核心转储

时间:2015-08-19 05:08:05

标签: c

我已经为Quicksort制作了代码。它在某些情况下运行良好,但在大多数情况下它会导致核心转储问题。大多数情况都是长输入> 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++)
    {
        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]);

}

1 个答案:

答案 0 :(得分:4)

更正该行(删除&#39; =&#39;)

if(arr[i]<=arr[s])

if(arr[i]<arr[s])

它进入一个无限循环,因此导致堆栈溢出。