c珠排序会有所帮助

时间:2010-11-16 11:44:29

标签: c sorting

我在数组中有一个很大的正整数列表,并且想要使用磁珠排序,但是发现它没有很好地记录。有没有人有珠子排序的代码?

2 个答案:

答案 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倍,并且数组元素越大,情况就越糟糕。我不建议使用它。