《漫画算法》-- 计数排序

170 阅读1分钟

什么是计数排序

通过一个长度为最大值与最小值之差的数组,遍历无序的数列,在对应的下标中记录出现的次数。最后在遍历生成的数组,输出数组元素的下标值,元素的值是几,就输出多少次。

  • 适用性:一定范围内的整数排序,且取值范围不大的情况下
  • 用空间还时间,时间复杂度:O<=O(nlogn)
def count_sort(array=[]):
    # 1.得到数列的最大值
    max_value = array[0]
    for i in range(1,len(array)):
        if array[i] > max_value:
            max_value = array[i]
    # 2.根据数列的最大值确定统计数组的长度
    # 长度为max_value+1是用以保证数组的最后一个下标是max_value
    count_array = [0] * (max_value + 1)
    # 3.遍历数列,填充统计数组
    for i in range(0, len(array)):
        count_array[array[i]] += 1
    # 4.遍历统计数组,输出结果
    sorted_array = []
    for i in range(0, len(count_array)):
        for j in range(0, count_array[i]):
            sorted_array.append(i)
    return sorted_array
    

my_array = list([4, 4, 5, 8, 6, 7, 6, 1, 3, 8, 9])
print(count_sort(my_array))