📅  最后修改于: 2023-12-03 15:18:52.536000             🧑  作者: Mango
在计算机科学中,排序是一种算法,它将一系列元素按指定的顺序进行排列。计数排序是一种比较简单的排序算法,属于非比较式排序。
计数排序的基本思想是统计序列中每个元素出现的次数,然后根据次数对元素进行排序。
countlist
;countlist
进行部分求和,使得 countlist[i]
存储的是元素值为 i
的元素在排完序后的秩;countlist
把各个元素放到它在排完序后的正确位置上。def count_sort(arr: list) -> list:
"""
实现计数排序算法
:param arr: 需要排序的列表
:return: 排序后的列表
"""
n = len(arr)
# 统计每个元素出现的次数
count_list = [0] * (max(arr) + 1)
for i in range(n):
count_list[arr[i]] += 1
# 对 count_list 进行部分求和,计算每个元素在排完序后的秩
for i in range(1, len(count_list)):
count_list[i] += count_list[i - 1]
# 倒序扫描原序列,根据 count_list 把元素放到它在排完序后的正确位置上
sort_list = [0] * n
for i in range(n - 1, -1, -1):
sort_list[count_list[arr[i]] - 1] = arr[i]
count_list[arr[i]] -= 1
return sort_list
计数排序的时间复杂度为 $O(n+k)$,其中 $n$ 是数组的元素个数,$k$ 是数组中最大元素的值。空间复杂度为 $O(n+k)$。时间复杂度较小,适用于数据范围很大但数据值范围很小的序列排序。
计数排序是一种简单实用的排序算法,对于数据范围很大但数据值范围很小的序列排序,计数排序比其他排序算法更优秀。在实际应用中,我们可以根据序列的特点选择合适的排序算法。