【数据结构】计数排序 (Counting Sort)

I. 阅读前你所需的基础知识

  1. 了解什么是排序 (sort)
  2. 熟悉数组 (array)列表 (list) 或者类似的容器

II. 计数排序的原理

  • 计数排序算法思想

    1. 假设我们有如下的一组数据,每一个数据有其对应的权重
    在这里插入图片描述
    2. 记录下每个权重分别对应多少元素
    在这里插入图片描述
    3. 创建一个新的容器,并根据权重所对应的数据数量预留空间
    在这里插入图片描述
    4. 遍历原来容器内的每个数据,并按顺序填入新的容器

    1. 加入第一个元素A,权重为1,放在新容器内第一个权重为1的位置
      在这里插入图片描述

    2. 加入第二个元素B,权重为1,放在新容器第二个权重为1的位置
      在这里插入图片描述

    3. 加入第三个元素C,权重为0,放在新容器第一个权重为0的位置
      在这里插入图片描述

    4. 加入第四个元素D,权重为0,放在新容器第二个权重为0的位置
      在这里插入图片描述

    5. 加入第五个元素E,权重为2,放在新容器第一个权重为2的位置
      在这里插入图片描述

    6. 加入第六个元素F,权重为3,放在新容器第一个权重为3的位置
      在这里插入图片描述

    7. 加入第六个元素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在排序后,前后顺序改变)

    在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值