zoukankan      html  css  js  c++  java
  • 桶排序

    太累,有空再写文字描述把

    def bucket_sort(array=[]):
        # 1.得到数列的最大值最小值,并算出差值d
        max_value = array[0]
        min_value = array[0]
        for i in range(1, len(array)):
            if array[i] > max_value:
                max_value = array[i]
            if array[i] < min_value:
                min_value = array[i]
        d = max_value - min_value
        # 2.初始化桶
        '''
        桶排序需要创建多个桶来协助排序
        每一个桶代表一个区间范围,里面可以承载一个或多个元素
    
        '''
        bucket_num = len(array) # 创建桶的数量等于原始数列的元素数量
        bucket_list = [] # 把所有的桶都保存再bucket_list 这个集合中,每个桶都是个列表
        for i in range(0, bucket_num):
            bucket_list.append([]) # 这个是数列再嵌套数列么
        # 3.遍历原始数组,将每个元素放入桶中
        for i in range(0, len(array)):
            # 桶的区间跨度为什么按这个来算;他会随着i变化而变化
            # /是整除在一定程度上可以算出来该整数的下标。最后一个桶中的元素一定不会重复,只有一个元素
            num = int((array[i] - min_value) * (bucket_num-1) / d) 
            bucket = bucket_list[num] # 以这个为间隔来让元素加入到相应这个间隔的桶中;所以有些桶可能为空
            bucket.append(array[i])
        # 4.对每个桶内部进行排序
        for i in range(0, len(bucket_list)):
            # sort方法采用了时间复杂度O(nlogn)的排序算法
            bucket_list[i].sort() 
        # 5.输出全部元素
        sorted_array = []
        for sub_list in bucket_list:
            for element in sub_list:
                sorted_array.append(element)
        return sorted_array
    
    
    my_array = list([4.12, 6.421, 0.0023, 3.0, 2.123, 8.122, 4.12, 10.09])
    print(bucket_sort(my_array))
    
    
    
    努力拼搏吧,不要害怕,不要去规划,不要迷茫。但你一定要在路上一直的走下去,尽管可能停滞不前,但也要走。
  • 相关阅读:
    常用的设计模式汇总
    设计模式总结
    C# WinForm文章收集
    SQL Server 2012/2016/2017 新增函数
    SQL Server 日期函数大全
    【BZOJ3622】已经没有什么好害怕的了
    【SDOI2009】Bill的挑战
    【HDU4507】恨7不成妻
    BSOJ 2423 -- 【PA2014】Final Zarowki
    BSOJ 4591 -- 【JLOI2015】城池攻占
  • 原文地址:https://www.cnblogs.com/wkhzwmr/p/15345107.html
Copyright © 2011-2022 走看看