桶排序

今天看到一个简单又感觉巧妙的排序——桶排序

在这里插入图片描述

如图所示,我们如何对5 3 5 2 8(0分-10分数范围内)进行排序?

  • 首先我们需要准备好题意0-10整个范围的桶li_tong,其中len(li_tong)=11,其中桶数组中的index表示0-10范围内的顺序分数值,数组中每个index下的值表示每个分数在带排序数据中出现的次数
  • 然后把带排序的数字都放入桶数组中的各个桶中
  • 最后将各个桶的代表的分数值顺序打印出来,则是排序后的结果,其中每个分数需要打印每个桶中的数字也就是带排序数组中数字出现的次数,便得到了最后的结果!代码如下“
def sorted_string(string):
    li_tong = [0 for i in range(11)]
    for s in string:
        li_tong[s] += 1
    for index, value in enumerate(li_tong):
        print(index, value)
        if value != 0:
            for i in range(value):
                print(index, end=" ")

这样排序真的很简单快速,但是缺点是浪费空间,如果数字范围比较大,出现的数字量少,那就会十分浪费空间。比如,例子中开辟了一块长度为11的空间区域,但是其实只使用了其中4个。

本文参考https://wiki.jikexueyuan.com/project/easy-learn-algorithm/bucket-sort.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值