【A-排序】python实现八大排序算法之9-桶排序(BucketSort)

桶排序

基本思想:
基本思想很简单,如果有一个数组A,包含N个整数,值从1到M,桶排序(BucketSort)。留置一个数组S,里面含有M个桶,初始化为0。然后遍历数组A,读入Ai时,S[Ai]增一。所有输入被读进后,扫描数组S得出排好序的表。该算法时间花费O(M+N),空间上不能原地排序。

'''
Creat by HuangDandan
2018-08-19
[email protected]
桶排序

桶排序也叫计数排序,将数据集里面所有元素按顺序列举出来,然后统计元素出现的次数。最后按顺序输出数据集里面的元素。
但是桶排序非常浪费空间, 比如需要排序的范围在0~10000000之间, 需要排序的数是[3,9,4,10000000], 同样需要10000000-3+1个空间

注意: 桶排序不能排序小数

代码实现注意点:
1-如何将桶中的计数转换成原列表中的元素返回



'''
def BucketSort(Lst):
    Bucket = [0]*(max(Lst)- min(Lst) +1)    #创建并初始化桶
    for i in range(len(Lst)):               #把所有的元素放入桶中,即把对应的元素+1
        Bucket[Lst[i]-min(Lst)] += 1
    temp = []

    for i in range(len(Bucket)):            #取出桶中的元素
        if Bucket[i] != 0:
            temp += [min(Lst) + i] * Bucket[i]

    # for i in range(len(Bucket)):          #取出桶中的元素
    #     while Bucket[i] != 0:
    #         temp.append(min(Lst)+i)
    #         Bucket[i] -= 1

    return temp


if __name__ == "__main__":
    Lst1 = [1,4,5,2,55,44,66,77,66,66,88,1]
    print(Lst1)
    print(BucketSort(Lst1))
    print('------------------------------------')

参考博客:
https://www.jb51.net/article/123676.htm
https://blog.csdn.net/iqqiqqiqqiqq/article/details/54837711

猜你喜欢

转载自blog.csdn.net/u010591976/article/details/81838263