计数排序(使用Pyython描述)

此算法描述

  

此算法特性

此算法适用场景




代码

def CountingSort(arr):

    max_value = max(arr) # 列表中的最大值
    min_value = min(arr) # 列表中的最小值

    template_arr =[0]*len(arr) # 储存元素个数信息
    res_arr = [0]*len(arr) # result_list


    for value in arr: # 计算列表中每个元素出现的次数
        template_arr[value-min_value] = template_arr[value-min_value] + 1

    for now_local in range(1,len(arr)): # 计算此元素之前的个数(包括此元素: 90 90 91. 那么91就是出现了三次).
        template_arr[now_local] = template_arr[now_local] +  template_arr[now_local-1]

    print(template_arr)

    for i in range(len(arr)-1,-1,-1): 
        # 倒序进行对比.这么做的原因是: [90 91 91 92]. 那么第二个91是第三名.

        res_arr[ template_arr[ arr[i]- min_value ]-1 ] = arr[i]

        '''
        arr[i]- min_value   : 此元素在list中处于第几名.

        template_arr[ arr[i]- min_value ] : 此元素前面有多少个元素

        res_arr[ template_arr[ arr[i]- min_value ]-1 ] : 减一是因为 前面有的元素个数也包括此元素本身
            
        '''
        template_arr[arr[i]-min_value]-=1

    return res_arr


print(CountingSort([7,5,4,4]))




参考

posted @ 2020-03-19 11:26  高坦的博客  阅读(167)  评论(0)    收藏  举报