我在数组中有一个很大的正整数列表,并且想要使用磁珠排序,但是发现它没有很好地记录。有没有人有珠子排序的代码?
答案 0 :(得分:2)
此页面包含多种语言的实现,包括C: http://rosettacode.org/wiki/Sorting_algorithms/Bead_sort
答案 1 :(得分:0)
来自This Question,修改了Bead Sort,使用O(N)
额外空格而非O(N*k)
,如Rosetta Code版本。
void sort(int A[], int N)
{
int i, j;
int *R = calloc(N, sizeof(int));
do for (i = j = 0; i < N; i++)
if (A[i]) { R[j++]++; A[i]--; }
while (j);
for (j = N, i = 0; i < N; i++)
A[i] = R[--j]; // A is now sorted ascending.
free(R);
}
但是,它比qsort
慢至少10倍,并且数组元素越大,情况就越糟糕。我不建议使用它。