一、算法描述

假设有一组长度为N的待排关键字序列K[1....n]。

  1. 首先将这个序列划分成M个的子区间(桶)。
  2. 然后基于某种映射函数 ,将待排序列的关键字k映射到第i个桶中(即桶数组B的下标 i) ,那么该关键字k就作为B[i]中的元素(每个桶B[i]都是一组大小为N/M的序列)。
  3. 对每个桶B[i]中的所有元素进行比较排序(可以使用快排)。
  4. 然后依次枚举输出B[0]....B[M]中的全部内容即是一个有序序列。

二、图示

假如待排序列K= {49、38 、35、 97 、 76、 73 、 27、 49 }。
这些数据全部在1—100之间。因此我们定制10个桶,然后确定映射函数f(k)=k/10。
则第一个关键字49将定位到第4个桶中(49/10=4)。
依次将所有关键字全部堆入桶中,并在每个非空的桶中进行快速排序后得到如下图所示:

          
对上图只要顺序输出每个B[i]中的数据就可以得到有序序列了。

三、性能描述

    数据结构 :数组

  最差时间复杂度 :O(n2)

  平均时间复杂度 :O(n+k)

  最差空间复杂度 :O(n*k)

四、总结

  1. 箱排序费空间。
  2. 箱排序只适用于关键字取值范围较小的情况,否则所需箱子的数目m太多导致浪费存储空间和计算时间。

五、伪代码

void BucketSon(R){ //对R[0..n-1]做桶排序,其中0≤R[i].key<1(0≤i<n)for(i=0,i<n;i++) //分配过程.将R[i]插入到桶B[「n(R[i].key)」]中; //可插入表头上for(i=0;i<n;i++) //排序过程
         当B[i]非空时用插人排序将B[i]中的记录排序;for(i=0,i<n;i++) //收集过程
         若B[i]非空,则将B[i]中的记录依次输出到R中;}

参考文档:

  1. 图解"数据结构-内部排序算法"分配排序:箱排序、基数排序

  http://www.myexception.cn/other/918080.html

  2. http://zh.wikipedia.org/wiki/桶排序

转载于:https://www.cnblogs.com/butyoux/archive/2013/01/18/2866166.html

排序算法_桶排序(箱排序)相关推荐

  1. 希尔排序是一种稳定的排序算法_十大经典排序算法——希尔排序

    vs code ppt c++/java 目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的 ...

  2. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

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

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

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

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

  5. std中稳定排序算法_排序算法问题:稳定排序与不稳定排序

    (给算法爱好者加星标,修炼编程内功) 作者:紫红的泪 https://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html 前言 排 ...

  6. mysql外部排序算法_「干货总结」程序员必知必会的十大排序算法

    绪论 身为程序员,十大排序是是所有合格程序员所必备和掌握的,并且热门的算法比如快排.归并排序还可能问的比较细致,对算法性能和复杂度的掌握有要求.bigsai作为一个负责任的Java和数据结构与算法方向 ...

  7. [ 数据结构 -- 手撕排序算法第四篇 ] 选择排序

    手撕排序算法系列之第四篇:选择排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算 ...

  8. 排序算法之冒泡排序及鸡尾酒排序

    目录 一.排序算法的分类 二.冒泡排序 1.原始的冒泡排序 2.改进一步的冒泡排序 3.更进一步的冒泡排序 三.鸡尾酒排序 四.完整测试代码 一.排序算法的分类 在介绍排序算法之前,我们先根据时间复杂 ...

  9. 数据结构排序算法(一):排序方法分类和各种排序方法的实现

    一. 实验目的 1. 掌握各种常用排序的算法思想: 2. 掌握各种常用排序的算法实现: 3. 掌握各种常用排序时间复杂度,比较各种排序的优缺点. 二.排序算法的归类: 总的排序算法分为以下几类: 1. ...

最新文章

  1. CentOS下的Autoconf和AutoMake(实践篇) 2
  2. 在word中的公式以代码形式体现在web上的方法
  3. 学习python:练习3.随机生成200个序列号存入文件
  4. python docx runs_别再问我Python怎么操作Word了!
  5. Red5 修改RTMP监听端口和ip
  6. 【HihoCoder - 1550】顺序三元组(思维)
  7. spark内核揭秘-06-TaskSceduler启动源码解析初体验
  8. 万能Ghost全攻略(最详细完整的教程)
  9. 阿里2018校招编程题
  10. 使用java发送邮件(支持多人)
  11. 介绍一个产品的思维导图_思维导图介绍(1)
  12. u盘在 计算机管理显示无媒体,urdrive_u盘显示无媒体怎么办_启动盘
  13. 哈佛大学幸福课-笔记
  14. CSDN博客主页增加赞赏码收钱模块,高端大气上档次!
  15. c语言程序设计需要学多久,九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会...
  16. 【Unity】Obi插件系列(三)—— Collisions
  17. 2023新年快乐,友盟+伴你岁岁年年
  18. 简述docx文档格式-CTF竞赛专用
  19. Python生成器与迭代器
  20. eclipse运行出现unable to launch 错误

热门文章

  1. springboot websocket发送和接收消息代码资源下载
  2. IDEA创建springboot项目:Unable to import maven project: See logs for details
  3. 大工20春《计算机文化基础》在线测试3,大工20春《计算机文化基础》在线测试3题目【标准答案】...
  4. 性能测试(01)-jmeter元件-线程组、调试取样器
  5. 如何使用IDEA 显示一个类的所有方法?与eclipse的outline视图类似
  6. 扫描枪读条码数据在单片机串口电路的读取与显示
  7. 快速弄懂内存字节对齐
  8. java如何写外键关联_JAVA基础:Hibernate外键关联与HQL语法
  9. Cortex - M3 位带别名首地址的计算方法
  10. 虚拟机硬盘启动计算机后黑屏,高手亲自教告诉你win7虚拟机启动后黑屏的操作方案...