Day24 【概念解析】计数排序
行业概念

Day24 【概念解析】计数排序

· 约 698 字 · 阅读约 4 分钟
目录

整理定义

中文名称:计数排序

英文名称:counting sort

复述展开

计数排序是一种线性时间的排序算法,必须有确定范围的整数。

需要准备额外的数组存储,其中第i个元素是待排序数组A中值等于i的元素的个数。

计数排序的核心在于将输入的数据值转化为键存储在额外开辟的数组空间中。作为一种线性时间复杂度的排序,计数排序要求输入的数据必须是有确定范围的整数。

时间复杂度:

  • 平均时间复杂度:O(n + k)

  • 最佳时间复杂度:O(n + k)

  • 最差时间复杂度:O(n + k)

  • 空间复杂度:O(n + k)

动图展示

image

代码实现:

N = W = 100010
n = w = 0
a = b = [0] * N
cnt = [0] * W

def counting_sort():
    for i in range(1, n + 1):
        cnt[a[i]] += 1
    for i in range(1, w + 1):
        cnt[i] += cnt[i - 1]
    for i in range(n, 0, -1):
        b[cnt[a[i]] - 1] = a[i]
        cnt[a[i]] -= 1

理解体会

计数算法只能使用在已知序列中的元素在0-k之间,且要求排序的复杂度在线性效率上。 Â 计数排序和基数排序很类似,都是非比较型排序算法。但是,它们的核心思想是不同的,基数排序主要是按照进制位对整数进行依次排序,而计数排序主要侧重于对有限范围内对象的统计。基数排序可以采用计数排序来实现。

相关文章