首页 > 解决方案 > 计数排序技术对我不起作用。来自 abort(3) (SIGABRT) 的运行时错误中止信号

问题描述

给定的问题是对一个由 0、1 和 2 组成的数组进行排序。我决定使用以下计数排序技术来解决它。

void sort012(int a[], int n)
{
    int i,count[3];

    memset(count,0,sizeof(count));

    for(i=0; i<n ; i++)
        ++count[a[i]];

    for(i=1; i<3; i++)
        count[i] += count[i-1];

    for(i=n-1; i>=1; i--)
        count[i] = count[i-1];
    count[0] = 0;

    int output[n+1];

    for (i=0; i<n; i++)
    {
        output[count[a[i]]]= a[i];
        ++count[a[i]];
    }

    for (i = 0; i<n; ++i)  
        a[i] = output[i]; 
}

该算法通过的测试用例很少。但是当我尝试在 Geeksforgeeks 门户上提交它时,它显示运行时错误:Abort signal from abort(3) (SIGABRT)

标签: runtime-errorc++14sigabrtcounting-sort

解决方案


推荐阅读