您的位置:首页 > 其它

算法笔记--简单桶排序

2018-02-12 14:24 246 查看

题目:

假设班上有5个同学,这学期期末考试,这5个同学分别考了5分、3分、5分、2分、8分,满分是10分。接下来将分数从大到小排序,排序后是8 5 5 3 2。

实现:

//**【简单桶排序】**//
void simpleBarrelSort() {
int a[11], i, j, t;
for (i = 0; i < 11; ++i) {
a[i] = 0;
}
for (i = 1; i <= 5; ++i) {
scanf("%d", &t);
a[t]++;
}
//从大到小输出
for (i = 10; i >= 0; --i) {
for (j = 0; j < a[i]; ++j) {
printf("%d\t", i);
}
}
printf("\n");
//从小到大输出
for (i = 0; i < 11; ++i) {
for (j = 0; j < a[i]; ++j) {
printf("%d\t", i);
}
}
}
时间复杂度O(m+n).

这个算法非常浪费内存空间。

算法思想:

这个算法就好比有11个桶,编号从 0~10 。每出现一个数,就在对应的编号的桶中放一个小旗子,最后只要数数每个桶中有几个小旗子就行了。例如 2号桶中有 1 个小旗子,表示 2 出现了一次;3号桶中有个 1 个小旗子,表示 3 出现了一次; 5号桶中有 2 个小旗子,表示 5 出现了两次; 8号桶中有 1 个小旗子,表示 8 出现了一次。



参考啊哈磊的《啊哈!算法》一书。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: