Logo

计数排序(概念)

让我们来学习计数排序算法。

概念

计数排序(概念)

让我们来学习计数排序算法。

伪代码

1countingSort(数组) 2 在数组中找出最大值和最小值,创建一个大小为 max - min + 1 的新数组 3 对于 j <- 0 到 数组长度 4 找出原数组中每个元素的频次,并将该频次存储在新数组中(元素值 - min)对应的位置 5 对于 i <- 1 到 最大值 6 计算并存储累积和到新数组中 7 对于 k <- 数组长度 8 找出原数组中每个元素在排序后数组中的索引(原数组元素的值对应排序数组中的索引) 9 将该元素减 1,然后将其值放置在排序数组的对应索引位置
1def counting_sort(arr): 2 3 # 找出最大值和最小值 4 max_element = max(arr) 5 min_element = min(arr) 6 7 # 存储原数组中每个元素的频次(计数) 8 frequency = [0] * (max_element - min_element + 1) 9 10 # 统计原数组中每个元素的频次 11 for i in range(len(arr)): 12 frequency[arr[i] - min_element] += 1 13 14 # 计算并存储累积和 15 for i in range(1, len(frequency)): 16 frequency[i] += frequency[i - 1] 17 18 # 这将是最终的排序结果数组 19 sorted_array = [None] * len(arr) 20 21 22 # 从后往前遍历原数组 23 # 找出每个元素在排序数组中的正确位置(元素值对应索引) 24 # 将该位置的值填入,然后将频次减 1 25 for i in range(len(arr) - 1, -1, -1): 26 sorted_array[frequency[arr[i] - min_element] - 1] = arr[i] 27 frequency[arr[i] - min_element] -= 1 28 29 # 返回排序后的数组 30 return sorted_array 31 32 33# 测试代码 34arr = [3, 4, 2, 5, 1, 7, 3] 35print("排序前的数组:") 36print(arr) 37print("排序后的数组:") 38print(counting_sort(arr))

许可证