【桶排序~python】


桶排序:

# -*- coding = utf-8 -*-
# @Time : 2022/5/13 12:20
# @Author : lxw_pro
# @File : py-12.py
# @Software : PyCharm

# 桶排序:
'''
桶排序的表现取决于数据的分布。
也就是需要对不同数据排序时采取不同的分桶策略。

平均情况时间复杂度:O(n+k)
最坏情况时间复杂度:O(n**2k)

空间复杂度:O(nk)

'''
import random

def t_sort(li, n=100, max_num=10000):
    ts = [[] for _ in range(n)]                 # 创建桶
    for val in li:
        i = min(val // (max_num // n), n-1)     # i 表示val放到几号桶里
        ts[i].append(val)                       # 将val符合条件的所有元素追加到ts桶中
        for j in range(len(ts[i])-1, 0, -1):    # 保持桶内的顺序
            if ts[i][j] < ts[i][j-1]:
                ts[i][j], ts[i][j-1] = ts[i][j-1], ts[i][j]
            else:
                break
    sor_li = []                     # 新建一个空桶
    for tol in ts:
        sor_li.extend(tol)          # 将tol所有元素添加到sor_li空桶中
    return sor_li


li = [random.randint(0, 10000) for i in range(10000)]
# print(li)
li = t_sort(li)
print(li)


上一章链接:二叉树的前序、中序、后序及层次遍历


江湖一言:

码不在多,掌握才行。

持续更新中…

  • 19
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 33
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值