python算法之计数排序

一、计数排序简介

计数排序(Counting Sort)是一种不比较数据大小的排序算法,是一种牺牲空间换取时间的排序算法。

计数排序适合数据量大且数据范围小的数据排序,如对人的年龄进行排序,对考试成绩进行排序等。

计数排序先找到待排序列表中的最大值 k,开辟一个长度为 k+1 的计数列表,计数列表中的所有初始值都为 0。走访待排序列表,如果走访到的元素值为 i,则计数列表中索引 i 的值加1,走访完整个待排序列表,就可以统计出待排序列表中每个值的数量。然后创建一个新列表,根据计数列表中统计的数量,依次在新列表中添加对应数量的 i ,得到排好序的列表。


二、计数排序原理

计数排序的原理如下:

1. 找到待排序列表中的最大值 k,开辟一个长度为 k+1 的计数列表,计数列表中的值都为 0。

2. 走访待排序列表,如果走访到的元素值为 i,则计数列表中索引 i 的值加1。

3. 走访完整个待排序列表,计数列表中索引 i 的值 j 表示 i 的个数为 j,统计出待排序列表中每个值的数量。

4. 创建一个新列表,遍历计数列表,依次在新列表中添加 j 个 i,新列表就是排好序后的列表,整个过程没有比较待排序列表中的数据大小。

以列表 [5, 7, 3, 7, 2, 3, 2, 5, 9, 5, 7, 6] 进行升序排列为例。列表的初始状态如下图。python算法之计数排序_第1张图片

1. 待排序列表中的最大值为9,所以开辟一个长度为10的计数列表,索引为0~9,值全为0。

 python算法之计数排序_第2张图片

2. 走访待排序列表,如果走访到的元素值为 i,则计数列表中索引 i 的值加1。第一个元素值为5,计数列表中索引5的值加1,从0变为1。

python算法之计数排序_第3张图片

3. 第二个元素值为7,计数列表中索引7的值加1,从0变为1。

python算法之计数排序_第4张图片

4. 第三个元素值为3,计数列表中索引3的值加1,从0变为1。

python算法之计数排序_第5张图片

5. 第四个元素值为7,计数列表中索引7的值加1,从1变为2。

python算法之计数排序_第6张图片

6. 重复走访完整个待排序列表,所有元素的个数都统计到了计数列表中。

python算法之计数排序_第7张图片

7. 创建一个新列表,遍历计数列表,依次在新列表中添加对应数量的元素。0和1都是0个,不需要添加,2有两个,在新列表中添加两个2。添加后计数列表中减掉对应的数量。

python算法之计数排序_第8张图片

8. 3有两个,继续在新列表中添加两个3。添加后计数列表中减掉对应的数量。

 python算法之计数排序_第9张图片

9. 遍历整个计数列表,添加完所有的数据,新列表就是排序完成后的列表。排序结果如下图。

python算法之计数排序_第10张图片

希望大家越来越好,我是爱笑的瑞先生
————————————————
版权声明:本文为CSDN博主「Python碎片」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_43790276/article/details/107398262

你可能感兴趣的:(算法,排序算法,数据结构)