• 桶排序


    桶排序的基本思想是:把数组 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
  • 相关阅读:
    asp image
    Linux安装破解sublime text 2
    Ubuntu Java环境配置
    Ubuntu上完美视频播放软件XBMC
    制作Ubuntu Live启动盘
    STM32·flash烧写
    Ubuntu上用Windows那些软件
    Ubuntu屏幕亮度控制在acer4750g笔记本上失效的解决方法
    Ubuntu的grub启动界面,默认高亮选项的修改方法
    Ubuntu解决无法删除msttcorefonts的问题
  • 原文地址:https://www.cnblogs.com/tsdblogs/p/9943215.html
Copyright © 2020-2023  润新知