使用C实现基数排序

时间:2016-11-29 14:56:11

标签: c sorting radix-sort

我在下面的问题中被困了几天。我用C来实现基数排序,一切都很好,除了一行代码。你能帮我解决这个问题吗?

我的问题出在radix_sort函数的第一行。当我使用POST时,我可以正确运行程序。但是,我想使用我传递给函数的size变量,但是当我使用int semi_sort[12]而不是int semi_sort[size]时,我的程序会崩溃。谁能告诉我为什么会这样?顺便说一句,我提到this link,在这位作者的代码中,他做了int semi_sort[12]。这次为什么这行代码有效?

提前谢谢!!

int semiSorted[size]

1 个答案:

答案 0 :(得分:0)

您遇到代码问题:

for(i=1;i<size;i++){
    bucket[i] += bucket[i-1];
}

因为size可能比bucket_size更大。

可能你有问题:

for(i=size-1;i>=0;i--){
    semi_sort[--bucket[(arr[i]/significant_num)%10]] = arr[i];
}

因为--bucket[(arr[i]/significant_num)%10]可以大于11或小于0。

并且find_the_largest在负数上无效。

您可以为缓冲区动态分配内存,如下所示:

semi_sort = malloc(size * (sizeof *semi_sort));

并且不要忘记结束记忆(free(semi_sort))。