这是一个非常快的排序算法
假设需要对数据范围在0~1000的整数排序,我们需要1001个桶,来表示0~1000之间每一个数出现的次数,每一桶的作用标记每个数出现的次数.
桶排序时间复杂度为O(N+M),M为桶的个数,对于离散型数据,就有点浪费空间了.
有点像bitmap,这个把每个数压缩成1bit.
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
int main()
{
int book[1001];
int i, j, t, n;
for(i = 0; i <= 1000; ++i)
{
book[i] = 0;
}
scanf("%d", &n);
for(i = 1; i <= n; ++i)
{
scanf("%d", &t);
book[t]++;
}
for(i = 0; i <= 1000; ++i)
{
for(j = 1; j <= book[i]; ++j)
{
printf("%d ", i);
}
}
printf("\n");
system("pause");
return 0;
}