我在下面的问题中被困了几天。我用C来实现基数排序,一切都很好,除了一行代码。你能帮我解决这个问题吗?
我的问题出在radix_sort函数的第一行。当我使用POST
时,我可以正确运行程序。但是,我想使用我传递给函数的size变量,但是当我使用int semi_sort[12]
而不是int semi_sort[size]
时,我的程序会崩溃。谁能告诉我为什么会这样?顺便说一句,我提到this link,在这位作者的代码中,他做了int semi_sort[12]
。这次为什么这行代码有效?
提前谢谢!!
int semiSorted[size]
答案 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)
)。