【蓝桥杯】省赛无忧班(Python 组)第 2 期 9.5桶排序

本文详细介绍了两种使用Python实现的分桶排序算法,通过将元素分配到不同的桶中,然后对每个桶内的元素进行排序,最终合并得到有序序列。方法一是利用itertools模块,方法二是自定义函数实现。

#1.方法一
from itertools import chain
def bucket_sort(a, bucket_count):
    min_value, max_value = min(a), max(a)
    # 桶大小
    bucket_size = (max_value - min_value + 1) // bucket_count
    res = [[] for _ in range(bucket_count + 1)]

    for x in a:
        idx = (x - min_value) // bucket_size
        res[idx].append(x)

        # 每个桶单独排序,可以采用其他排序算法
    for sublist in res:
        sublist.sort()

    return list(chain(*res))
# 读入一个整数n
n = int(input())
a = list(map(int, input().split()))
a = bucket_sort(a, min(n, 10000))
print(' '.join(map(str, a)))

#2.方法二
def BucketSort(a, bucketcount):
    minvalue, maxvalue = min(a), max(a)  # 找到列表中的最小值和最大值
    bucketsize = (maxvalue - minvalue + 1) // bucketcount  # 计算每个桶的大小
    res = [[] for _ in range(bucketcount + 1)]  # 创建一个空的桶列表

    for x in a:  # 遍历输入列表中的每个元素
        idx = (x - minvalue) // bucketsize  # 计算元素应该放入哪个桶中
        res[idx].append(x)  # 将元素放入对应的桶中

    ans = []  # 创建一个空的结果列表
    for res_x in res:  # 遍历每个桶
        res_x.sort()  # 对桶中的元素进行排序
        ans += res_x  # 将排序后的结果合并到结果列表中

    return ans  # 返回排序后的结果列表

n = int(input())  # 读取输入的整数 n
a = list(map(int, input().split()))  # 读取一行包含 n 个整数的输入,并将其转换为列表 a
a = BucketSort(a, 5)  # 调用 BucketSort 函数对列表 a 进行排序
print(' '.join(map(str, a)))  # 打印排序后的结果

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值