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

    桶排序的基本思想是:把数组 arr 划分为n个大小相同子区间(桶),每个子区间各自排序,最后合并
    计数排序是桶排序的一种特殊情况,可以把计数排序当成每个桶里只有一个元素的情况。

    针对输入数据均匀分布的特点,因此将数据分布的区间可以均匀分为n个子区间。那么就有:

    max - min = n * width; 

    其中,max,min 是输入数据的最大值最小值,n是子区间个数,width是子区间宽度。 
    这样划分后,每个数据x对应的桶的编号(0-n-1)就是;

    index = (x - min) / width = (x - min) / (max - min) * n;

    如果我们取n= (max-min)/Array.length 时,就有:

    index = (x - min) / (max - min) * (max-min) / Array.length = (x - min) / Array.length;

    以下是桶排序的步骤:

    1.找出待排序数组中的最大值max、最小值min
    2.我们使用 动态数组ArrayList 作为桶,桶里放的元素也用 ArrayList 存储。桶的数量为(max-min)/arr.length+1
    3.遍历数组 arr,计算每个元素 arr[i] 放的桶
    4.每个桶各自排序
    5.遍历桶数组,把排序好的元素放进输出数组

    实现代码如下:

    def bucket_sort(nums):
        MAX=max(nums)
        MIN=min(nums)
        #桶的数量
        bucket_num=(MAX-MIN)//len(nums)+1
        arrays=[[] for i in range(bucket_num)]
        #把原数组的各个树分配到各个桶中
        for i in nums:
            arrays[(i-MIN)//len(nums)].append(i)
        target=[]
        #对各个桶里面的树进行排序,并且合并
        for item in arrays:
            item.sort()
            target+=item
        return target
  • 相关阅读:
    POJ 1251Jungle Roads
    ES6---Class基本语法
    浅谈JS的toString
    为什么用Object.prototype.toString.call(obj)检测对象类型?
    JS输出内容为[object Object]与toString
    Sublime text JsFormat插件的安装
    Sublime Text 无法使用Package Control或插件安装失败的解决方法
    Emmet-前端开发神器
    sublime text 3中文版配置--插件ChineseLocalizations
    vs code相关用法
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/9943215.html
Copyright © 2011-2022 走看看