补充说明三点

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

C#代码演示

//待排数组

var unsorted = new int[] { 6, 2, 4, 1, 5, 9 };

//分配空桶

var buget = new int[10];

//直接以每个待排数字为索引,将自己的值赋值给当前桶

for (int i = 0; i < unsorted.Length; i++)

{

buget[unsorted[i]] = unsorted[i];

}

//跳过值为0的空桶,顺序输出即可

for (int i = 0; i < buget.Length; i++)

{

if (buget[i] > 0)

Console.WriteLine(buget[i]);

}

经典排序算法(二)--桶排序Bucket Sort相关推荐

  1. 经典白话算法之桶排序

    最快最简单的排序--桶排序 在我们生活的这个世界中到处都是被排序过的.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序--总之很多东西都 ...

  2. 排序算法:桶排序、计数排序、基数排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 这篇博客将主要介绍三种时间复杂度是 ...

  3. 排序算法之--桶排序(桶,像桶一样的排序,听起来很有趣哦0。0)

    排序算法之--桶排序 桶排序的工作的原理是将数组分到有限数量的桶子里,而这个有限数量是指多少个呢? 不急,容我细细道来:我们可以先求出这个数组的最大值和最小值,那么桶的数量就是max-min+1咯 为 ...

  4. 常用排序算法(八)桶排序

    桶排序 概要 本章介绍排序算法中的桶排序.内容包括: 1. 桶排序介绍 2. 桶排序图文说明 3. 桶排序实现 3.1  桶排序C实现 3.2  桶排序C++实现 3.3  桶排序Java实现 转载请 ...

  5. c语言桶排序,排序算法之——桶排序

    这是本人的第一篇随笔,为的是分享学习经验,和大家讨论一些算法,以便取得些许进步,也是对学习的总结. 话不多说,下面我会用图文的方式向各位介绍桶排序. 1.主要思想: 桶排序的大体思路就是先将数组分到有 ...

  6. 排序算法二:归并排序(Merge sort)

    归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 1 private void merge_sort(int[] array, i ...

  7. 排序算法_桶排序(箱排序)

    一.算法描述 假设有一组长度为N的待排关键字序列K[1....n]. 首先将这个序列划分成M个的子区间(桶). 然后基于某种映射函数 ,将待排序列的关键字k映射到第i个桶中(即桶数组B的下标 i) , ...

  8. 排序算法(7)----桶排序

    桶排序:  * 计数排序适合小范围的大量重复元素,而桶排序适合区间内尽可能随机的元素  * 它的思想是: * 把数据存在的区间划分为小的区间,就像桶一样,这些在一个桶中的数据在桶内排好序,再合并成排序 ...

  9. 常见的排序算法二——希尔排序

    原理:被称为增量缩小排序.先将序列按增量划分为元素个数相同的若干组, 使用直接插入排序法进行排序,然后不断缩小增量直至为1, 最后使用直接插入排序完成排序. 要点:增量的选择以及排序最终以1为增量进行 ...

  10. c语言排序算法_C语言写排序算法(二) —— 选择排序

    上次联系的算法是冒泡排序,不知道小伙伴们还记得不,中间穿插了一下比特币相关的分享,嘿嘿.今天来分享一下选择排序. 算法描述:选择排序是从数组中选择最大(小)的元素放到数组的最后一个,然后往前移,接着从 ...

最新文章

  1. 揭露Windows中各种不老实的服务
  2. SendMessage、PostMessage原理
  3. junit rule_使用JUnit的ExpectedException和@Rule测试自定义异常
  4. c++中运算符重载(加号运算,左移运算,前置后置++运算符,赋值运算,关系运算,函数运算)
  5. 森林怎么训练野人_138年前抓的“野人女孩”,最终命运如何?死前心愿让人心酸...
  6. MyCat分布式数据库集群架构工作笔记0020---高可用_单表存储千万级_海量存储_水平分表ER表
  7. 实现gabor filter的滤波
  8. Spring boot集成海康威视门禁设备
  9. java 实现图片转化为PDF
  10. vuex的commit和dispatch
  11. 小程序内配置公众号关注组件
  12. Flink学习1——运行时架构(standalone模式)
  13. 截图热键冲突:关闭360截图功能建议使用QQ截图
  14. 【原创】【狗眼看股】【2008-4-14】紧急更正:反弹的条件已不具备,后市看跌...
  15. Mac OS X,下载并安装ant
  16. 网站流量过大服务器不行,网站如何应对突然的大流量访问?
  17. 登陆QQ时总显示QQ安全防护进程,而且点了确定后QQ还是登不上
  18. ts 之 Pick 和 Omit
  19. delegate用法
  20. vue 范围拖选插件

热门文章

  1. (原創) 如何控制DE2 VGA輸出時某座標的顏色? (IC Design) (DE2) (Quartus II)
  2. 怎样进行云迁移 企业才不会后悔!
  3. Azure SQL作業
  4. 使用docker实现半自动化代码自动部署与回滚
  5. 通过消息跨进程发送与接收 TCopyDataStruct 数据 - 回复 skymesh
  6. ucOS学习--基础知识
  7. 使用RabbitMQ做的一些工作及经验教训
  8. linux下main函数的返回值问题
  9. 11.GitLab webhooks
  10. 13.docker exec