前言
计数排序,桶排序,和基数排序都需要额外的数据结构来辅助排序
def count_sort(lst, min_value, max_value):
# 获取所需桶的数量
bucket_num = max_value - min_value + 1
# 构建初始桶
bucket = [0] * bucket_num
# 统计元素数量,并存储在桶的对应位置
for i in lst:
bucket[i - min_value] += 1
cur = 0
# 将桶中元素依次放回原数组,覆盖原数组元素
for j in range(bucket_num):
for _ in range(bucket[j]):
lst[cur] = j
cur += 1
时间复杂度:
最优:$O(n+k)$
最坏:$O(n+k)$
平均:$O(n+k)$
空间复杂度: $O(k)$
稳定性: 稳定
额外提供一种稳定的计数排序Python实现
def count_sort(lst, min_value, max_value):
# 获取所需桶的数量
bucket_num = max_value - min_value + 1
# 构建初始桶
bucket = [0] * bucket_num
# 统计元素数量,并存储在桶的对应位置
for i in lst:
bucket[i - min_value] += 1
for j in range(1, bucket_num):
bucket[j] += bucket[j-1]
result = [None] * len(lst)
for k in range(len(lst) - 1, -1, -1):
t = lst[k] - min_value
bucket[t] -= 1
result[bucket[t]] = lst[k]
return result