Loading

桶排序

每个桶存放一定范围的数,再对桶内的数进行排序。

def but_sort(li, n=100, max_num=10000):
    """

    :param li: 待排序的序列
    :param n: 桶的个数
    :param max_num: 最大值
    :return: 排序后的序列
    """
    # 1. 创建桶
    buckets = [[] for _ in range(n)]

    # 2.将序列的中的数放到对应的桶里
    for value in li:
        # max_num//n代表一个桶内放几个数
        i_b = min((value // (max_num//n)), n-1)
        buckets[i_b].append(value)

        # 保持桶内顺序
        for j in range(len(buckets[i_b])-1, 0, -1):
            if buckets[i_b][j] < buckets[i_b][j-1]:
                buckets[i_b][j], buckets[i_b][j-1] = buckets[i_b][j-1], buckets[i_b][j]
            else:
                break
    sorted_li = []
    for b in buckets:
        for i in b:
            sorted_li.append(i)
    return sorted_li
li = [random.randint(0,10000) for i in range(100000)]
# print(li)
li = but_sort(li)
print(li)
print(len(li))

 

posted @ 2021-07-16 11:04  climber_dzw  阅读(36)  评论(0编辑  收藏  举报