【发布时间】:2011-05-10 18:34:47
【问题描述】:
我在一个数组中有一个大的正整数列表,我想使用珠排序,但发现没有很好的文档记录。谁有珠子排序的代码?
【问题讨论】:
我在一个数组中有一个大的正整数列表,我想使用珠排序,但发现没有很好的文档记录。谁有珠子排序的代码?
【问题讨论】:
此页面有多种语言的实现,包括 C: http://rosettacode.org/wiki/Sorting_algorithms/Bead_sort
【讨论】:
从 This Question 开始,对 Bead Sort 进行了修改,它使用 O(N) 额外空间而不是 Rosetta Code 版本中的 O(N*k)。
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 倍,而且数组元素越大,它就越差。我不建议使用它。
【讨论】: