I. 阅读前你所需的基础知识
- 了解什么是排序 (sort)
- 熟悉数组 (array),列表 (list) 或者类似的容器
II. 计数排序的原理
-
计数排序算法思想
1. 假设我们有如下的一组数据,每一个数据有其对应的权重
2. 记录下每个权重分别对应多少元素
3. 创建一个新的容器,并根据权重所对应的数据数量预留空间
4. 遍历原来容器内的每个数据,并按顺序填入新的容器-
加入第一个元素A,权重为1,放在新容器内第一个权重为1的位置
-
加入第二个元素B,权重为1,放在新容器第二个权重为1的位置
-
加入第三个元素C,权重为0,放在新容器第一个权重为0的位置
-
加入第四个元素D,权重为0,放在新容器第二个权重为0的位置
-
加入第五个元素E,权重为2,放在新容器第一个权重为2的位置
-
加入第六个元素F,权重为3,放在新容器第一个权重为3的位置
-
加入第六个元素G,权重为3,放在新容器第二个权重为3的位置
-
III. 计数排序的稳定性
-
稳定排序算法 (stable sorting algorithm): 稳定排序算法在对数据进行排序时,具有相同权重的数据会保持原有的先后顺序。
-
计数排序也是稳定的:计数排序是一个经典的稳定排序算法,它在排序过程中,具有相同权重的数据任然保持着未排序前的先后顺序。
-
示例:如下图,这是一组未排序的数据, 其中C与D同权重,A与B同权重,F与G同权重
经过排序后,A依然在B前面,C依然在D前面,F依然在G前面
-
-
不稳定的排序算法会有什么效果:不稳定的排序算法不保证同权重数据的先后顺序,比如对于刚才的排序,如果我们使用不稳定的排序算法,可能会得到如下结果 (A与B, C与D,F与G在排序后,前后顺序改变)