今天看到一个简单又感觉巧妙的排序——桶排序
如图所示,我们如何对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