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
  • 相关阅读:
    软件测试面试题(一)
    测试面试题
    测试
    测试理论
    软件测试的认识
    理论知识
    H5页面的测试方式
    mysql数据库,linux,面试理论等
    登录设计点
    ATM境外取款测试点
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/9943215.html
Copyright © 2011-2022 走看看