排序算法之计数排序


title: 计数排序
date: 2024-7-26 09:39:30 +0800
categories:

  • 排序算法
    tags:
  • 排序
  • 算法
  • 计数排序
    description: 计数排序(Counting sort)是一种稳定的线性时间排序算法。该算法于1954年由[哈罗德·H·西华德]提出。计数排序使用一个额外的数组𝐶,其中第i个元素是待排序数组𝐴中值等于𝑖的元素的个数。然后根据数组𝐶来将𝐴中的元素排到正确的位置。
    math: true

计数排序

计数排序(Counting Sort)是一种线性时间复杂度的排序算法。它适用于排序一定范围内的整数,特别是当范围不大时,表现非常高效。

计数排序的原理

计数排序的主要思想是通过统计每个元素的出现次数,计算出每个元素在排序后数组中的位置,从而实现排序。计数排序适用于数据范围相对较小且数据分布比较均匀的情况。

图示

计数排序

计数排序

计数排序的步骤

  1. 找出数组中的最大值和最小值:确定数据的范围。
  2. 创建计数数组:计数数组的大小为最大值和最小值之间的差加1,用于记录每个元素的出现次数。
  3. 统计每个元素的出现次数:遍历待排序数组,填充计数数组。
  4. 计算元素的最终位置:对计数数组进行累加处理,得到每个元素在排序后数组中的位置。前缀和具有明确的意义,prefix[num] - 1 代表元素 num 在结果数组 res 中最后一次出现的索引。这个信息非常关键,因为它告诉我们各个元素应该出现在结果数组的哪个位置。
  5. 构建输出数组:根据计数数组的信息,将原数组的元素放到正确的位置上。
  6. 复制到原数组:将输出数组复制回原数组,完成排序。

计数排序示例

step1

step1

step2

step2

step3

step3

step4

step4

step5

step5

step6

step6

step7

step7

step8

step8

复杂度分析

当输入的元素是𝑛个0到𝑘之间的整数时,它的运行时间是 Θ ( n + k ) \Theta (n+k) Θ(n+k)。计数排序不是比较排序,因此不被  Ω ( n log ⁡ n ) \Omega (n\log n) Ω(nlogn)的下界限制。

  • 时间复杂度为 O ( n + k ) O(n + k) O(n+<
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值