经典排序算法 - 桶排序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();
        }
复制代码

 

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

补充说明三点 1,桶排序是稳定的 2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下 3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法 我自...
  • gufuguang
  • gufuguang
  • 2013年09月30日 21:07
  • 341

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

桶排序的数组实现 桶排序(Bucket Sort)是迄今为止最快的一种排序法,其时间复杂度仅为Ο(n),也就是线性复杂度!不可思议吧?但它是有条件的。举个例子:一年的全国高考考生人数为500万,分...
  • yanglr2010
  • yanglr2010
  • 2016年05月01日 13:01
  • 1251

桶排序(Bucket Sort)----(排序算法七)

1.算法原理  将元素的值放入另一数组下标与其相等的位置      排序前:                    6  2  4  1  5  9      桶中:bucket[10]=   ...
  • whzhaochao
  • whzhaochao
  • 2013年10月24日 19:34
  • 1890

(四)分配排序:桶排序(Bucket Sort)

桶排序的思想和基数排序有点类似,都要借助临时空间.基数排序是先映射到大小为10的计数数组中,然后再映射到大小等于待排序数组长度的临时数组中. 而桶排序就是直接整个足够大的临时数组,把待排序的元素全部...
  • weiwenhp
  • weiwenhp
  • 2013年02月27日 17:29
  • 4497

算法学习-桶排序(Bucket Sort) C++实现

桶排序的思想就是这里有一个数量为Size个数的数组,数组的值范围为(
  • chenfs1992
  • chenfs1992
  • 2014年07月25日 23:51
  • 3256

桶排序_BUCKETSORT

桶排序_BUCKETSORT 桶排序的思想 桶排序的代码编写 总结桶排序_BUCKETSORT假设你有五百万份试卷,每份试卷的满分都是100分,如果要你对这些试卷按照分数进行排序,天噜啦,五百万份试卷...
  • ii1245712564
  • ii1245712564
  • 2015年05月20日 13:18
  • 1138

桶排序和样本排序(Bucket Sort and Sample Sort)

9.5桶排序和样本排序 桶排序(bucket sort)算法是一种流行的串行算法,用于排序包含n个元素数组,其值在区间[a, b]上匀分布。在该算法中,区间[a, b]被分为m个大小相等的子区间称为...
  • zycamym
  • zycamym
  • 2014年11月27日 00:23
  • 1914

算法导论8.4-4-单位圆中均匀分布情况--桶排序

#include #include using namespace std; typedef struct point_circle//圆内点的数据结构 { double x,y;//x,...
  • shakingWaves
  • shakingWaves
  • 2014年01月08日 13:32
  • 1036

桶排序-Bucket Sort

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

桶排序(Bucket Sort)

桶排序(Bucket Sort) 1.基本思想 2.排序流程 3.算法实现 4.算法分析
  • wgiyq
  • wgiyq
  • 2017年01月17日 12:48
  • 204
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:经典排序算法 - 桶排序Bucket sort
举报原因:
原因补充:

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