7. 计数排序(Counting Sort)
7.1。 核心思想
“统计每个元素的出现次数,直接计算最终位置”
7.2. 关键概念
- 非比较排序:通过统计而非比较确定位置
- 适用范围:整数且范围较小的数据集
- 空间换时间:需要额外计数数组
7.3. 算法步骤
- 找出数组中的最大值max_val
- 创建计数数组count,大小为max_val+1
- 统计每个元素出现次数
- 累加计数数组得到元素最终位置
- 反向填充结果数组保持稳定性
7.4 Python实现
7.4.1. 保持稳定性版(保持原始顺序)
特殊需求对非基础类型排序时,可以用这种保持稳定性的方法
def counting_sort(arr):
if not arr:
return
# 找出最大值(不用max函数)
max_val = arr[0]
for num in arr[1:]:
if num > max_val:
max_val = num
# 统计频率
count = [0] * (max_val + 1)
for num in arr:
count[num] += 1
# 计算累计分布
i = 1
while i <= max_val:
count[i] += count[i-1]
i += 1
# 反向填充
temp = [0] * len(arr)
k = len(arr) - 1
while k >= 0:
num = arr[k]
temp[count[num]-1] = num
count[num] -= 1
k -= 1
# 写回原数组(不用返回值)
for i in range(len(arr)):
arr[i] = temp[i]
7.4.2. 不保持稳定性版(会打乱相同元素的顺序)
一般对简单类型排序,没有必要保持稳定性,程序可以稍微简单些
def counting_sort(arr):
if not arr:
return
# 找出最大值(不用max函数)
max_val = arr[0]
for num in arr[1:]:
if num > max_val:

最低0.47元/天 解锁文章
5万+

被折叠的 条评论
为什么被折叠?



