经典排序算法 - 桶排序Bucket sort

转载 2016年08月30日 16:53:38

经典排序算法 - 桶排序Bucket sort


补充说明三点

1,桶排序是稳定的

2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下

3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法


我自己的理解哈,可能与网上说的有一些出入,大体都是同样的原理

无序数组有个要求,就是成员隶属于固定(有限的)的区间,如范围为[0-9](考试分数为1-100等)

例如待排数字[6 2 4 1 5 9]

准备10个空桶,最大数个空桶

[6 2 4 1 5 9]           待排数组

[0 0 0 0 0 0 0 0 0 0]   空桶

[0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)

 

1,顺序从待排数组中取出数字,首先6被取出,然后把6入6号桶,这个过程类似这样:空桶[ 待排数组[ 0 ] ] = 待排数组[ 0 ]

[6 2 4 1 5 9]           待排数组

[0 0 0 0 0 0 6 0 0 0]   空桶

[0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)

 

2,顺序从待排数组中取出下一个数字,此时2被取出,将其放入2号桶,是几就放几号桶

[6 2 4 1 5 9]           待排数组

[0 0 2 0 0 0 6 0 0 0]   空桶

[0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)

 

3,4,5,6省略,过程一样,全部入桶后变成下边这样

[6 2 4 1 5 9]           待排数组

[0 1 2 0 4 5 6 0 0 9]   空桶

[0 1 2 3 4 5 6 7 8 9]   桶编号(实际不存在)

 

0表示空桶,跳过,顺序取出即可:1 2 4 5 6 9

image

以下代码仅供参考

复制代码
        /// <summary>
        /// 桶排序
        /// 1),已知其区间,例如[1..10],学生的分数[0...100]等
        /// 2),如果有重复的数字,则需要 List<int>数组,这里举的例子没有重复的数字
        /// </summary>
        /// <param name="unsorted">待排数组</param>
        /// <param name="maxNumber">待排数组中的最大数,如果可以提供的话</param>
        /// <returns></returns>
        static int[] bucket_sort(int[] unsorted, int maxNumber = 99)
        {
            int[] sorted = new int[maxNumber + 1];
            for (int i = 0; i < unsorted.Length; i++)
            {
                sorted[unsorted[i]] = unsorted[i];
            }
            return sorted;
        }

        static void Main(string[] args)
        {
            int[] x = { 99, 65, 24, 47, 50, 88,33, 66, 67, 31, 18 };
            var sorted = bucket_sort(x, 99);
            for (int i = 0; i < sorted.Length; i++)
            {
                if (sorted[i] > 0)
                    Console.WriteLine(sorted[i]);
            }
            Console.ReadLine();
        }
复制代码

 

计数排序、桶排序和基数排序

计数排序 当输入的元素是 n 个 0 到 k 之间的整数时,它的运行时间是 Θ(n + k)。计数排序不是比较排序,排序的速度快于任何比较排序算法。 由于用来计数的数组C的长度取决于待排序...

通过haproxy 配置rabbitmq消息队列主从

1 创建haproxy的配置文件    sudo vi /etc/haproxy/ha_rabbit.conf 2 配置前向业务访问frontend(前置代理):     bind 0....
  • lsb2002
  • lsb2002
  • 2016年12月29日 18:29
  • 1199

经典排序算法 - 桶排序Bucket sort

补充说明三点1,桶排序是稳定的2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法我自己的理解哈,可能与网上说的有一些出入...

经典排序算法 - 桶排序Bucket sort

经典排序算法 - 桶排序Bucket sort 补充说明三点 1,桶排序是稳定的 2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3,桶排序非常快,但是同时也非常耗空间,基本...

排序算法总结之桶排序 Bucket Sort

算法原理: 桶排序假设输入数据服从均匀分布,假设输入数据由一个随机过程产生,该过程将元素均匀,独立地分布在[0,1)区间上。将[0,1)区间划分为n个相同大小的子区间,称为“桶”,然后便利输...

常见排序算法——桶排序(箱子排序)bucket Sort

桶排序是一个经典的排序算法,特点是速度快,算法复杂度为O(n),且是稳排,当然也是最耗空间的一种算法。例如: 1)排序一组数[7,3,19,11,6,8,1,15] 最大数是19,那首先创建20个...
  • Mind_V
  • Mind_V
  • 2017年05月08日 22:53
  • 142

算法排序之最简单最快的排序--桶排序(Bucket Sort)

桶排序(Bucket Sort):原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)...

桶排序Bucket sort

桶排序 (Bucket sort)或所谓的箱排序,工作的原理是将数组分到有限数量的桶子里。每个桶子再个别排序(有可能再使用别的排序算法或是以递归方式继续使用桶排序进行排序)。桶排序是鸽巢排序的一种归纳...

桶排序-Bucket Sort

转载:http://hxraid.iteye.com/blog/647759从《基于比较的排序结构总结 》中我们知道:全依赖“比较”操作的排序算法时间复杂度的一个下界O(N*logN)。但确实存在更快...

桶排序(Bucket Sort)的数组实现

桶排序的数组实现 桶排序(Bucket Sort)是迄今为止最快的一种排序法,其时间复杂度仅为Ο(n),也就是线性复杂度!不可思议吧?但它是有条件的。举个例子:一年的全国高考考生人数为500万,分...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典排序算法 - 桶排序Bucket sort
举报原因:
原因补充:

(最多只允许输入30个字)