算法吧-计数排序

计数排序

#排序思想:创建一个新列表,把需要计数的列表中的元素递归出来,使用类似字典的方式进行累加,通过循环迭代出值对应的索引个数,添加到原列表中
def count_sort(li,max_count):       #max_count 最大值
    new_li=[0 for _ in range(0,max_count+1)]        #新建列表都是0
    for i in li:                #把列表中数按索引存到新列表中,在对应的数值上,对应的索引累加,得到索引位置上的个数
        new_li[i]+=1            #计算对应位置上的个数
    li.clear() #清空li            #清楚旧列表中的数
    for ind,val in enumerate(new_li):   #使用enumerate查找对应索引上的值,此时的值就是元素个数
        for i in range(val):        #循环元素总个数
            li.append(ind)          #其索引就是其对应的值

在排序数量较少的情况下使用,如果列表长度在1到1亿 有限制,时间较长
def time_out():
    start=time.time()
    import random
    li = [random.randint(0, 1000) for _ in range(100)]
    count_sort(li, max_count=1000)
    print(li)
    end=time.time()
    return end-start
print(time_out())
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值