排序算法_桶排序(箱排序)
一、算法描述
假设有一组长度为N的待排关键字序列K[1....n]。
- 首先将这个序列划分成M个的子区间(桶)。
- 然后基于某种映射函数 ,将待排序列的关键字k映射到第i个桶中(即桶数组B的下标 i) ,那么该关键字k就作为B[i]中的元素(每个桶B[i]都是一组大小为N/M的序列)。
- 对每个桶B[i]中的所有元素进行比较排序(可以使用快排)。
- 然后依次枚举输出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)
四、总结
- 箱排序费空间。
- 箱排序只适用于关键字取值范围较小的情况,否则所需箱子的数目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
排序算法_桶排序(箱排序)相关推荐
- 希尔排序是一种稳定的排序算法_十大经典排序算法——希尔排序
vs code ppt c++/java 目录 1.1.排序分类 1.2.排序的定义: 对一序列对象根据某个关键字进行排序. 1.3.术语说明 稳定:如果a原本在b前面,而a=b,排序之后a仍然在b的 ...
- 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序
冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...
- 排序算法:桶排序、计数排序、基数排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 这篇博客将主要介绍三种时间复杂度是 ...
- 排序算法之--桶排序(桶,像桶一样的排序,听起来很有趣哦0。0)
排序算法之--桶排序 桶排序的工作的原理是将数组分到有限数量的桶子里,而这个有限数量是指多少个呢? 不急,容我细细道来:我们可以先求出这个数组的最大值和最小值,那么桶的数量就是max-min+1咯 为 ...
- std中稳定排序算法_排序算法问题:稳定排序与不稳定排序
(给算法爱好者加星标,修炼编程内功) 作者:紫红的泪 https://www.cnblogs.com/codingmylife/archive/2012/10/21/2732980.html 前言 排 ...
- mysql外部排序算法_「干货总结」程序员必知必会的十大排序算法
绪论 身为程序员,十大排序是是所有合格程序员所必备和掌握的,并且热门的算法比如快排.归并排序还可能问的比较细致,对算法性能和复杂度的掌握有要求.bigsai作为一个负责任的Java和数据结构与算法方向 ...
- [ 数据结构 -- 手撕排序算法第四篇 ] 选择排序
手撕排序算法系列之第四篇:选择排序. 从本篇文章开始,我会介绍并分析常见的几种排序,大致包括直接插入排序,冒泡排序,希尔排序,选择排序,堆排序,快速排序,归并排序等. 大家可以点击此链接阅读其他排序算 ...
- 排序算法之冒泡排序及鸡尾酒排序
目录 一.排序算法的分类 二.冒泡排序 1.原始的冒泡排序 2.改进一步的冒泡排序 3.更进一步的冒泡排序 三.鸡尾酒排序 四.完整测试代码 一.排序算法的分类 在介绍排序算法之前,我们先根据时间复杂 ...
- 数据结构排序算法(一):排序方法分类和各种排序方法的实现
一. 实验目的 1. 掌握各种常用排序的算法思想: 2. 掌握各种常用排序的算法实现: 3. 掌握各种常用排序时间复杂度,比较各种排序的优缺点. 二.排序算法的归类: 总的排序算法分为以下几类: 1. ...
最新文章
- CentOS下的Autoconf和AutoMake(实践篇) 2
- 在word中的公式以代码形式体现在web上的方法
- 学习python:练习3.随机生成200个序列号存入文件
- python docx runs_别再问我Python怎么操作Word了!
- Red5 修改RTMP监听端口和ip
- 【HihoCoder - 1550】顺序三元组(思维)
- spark内核揭秘-06-TaskSceduler启动源码解析初体验
- 万能Ghost全攻略(最详细完整的教程)
- 阿里2018校招编程题
- 使用java发送邮件(支持多人)
- 介绍一个产品的思维导图_思维导图介绍(1)
- u盘在 计算机管理显示无媒体,urdrive_u盘显示无媒体怎么办_启动盘
- 哈佛大学幸福课-笔记
- CSDN博客主页增加赞赏码收钱模块,高端大气上档次!
- c语言程序设计需要学多久,九江c语言编程学习,九江学c语言编程报班,九江学c语言编程一般要多久才能学会...
- 【Unity】Obi插件系列(三)—— Collisions
- 2023新年快乐,友盟+伴你岁岁年年
- 简述docx文档格式-CTF竞赛专用
- Python生成器与迭代器
- eclipse运行出现unable to launch 错误
热门文章
- springboot websocket发送和接收消息代码资源下载
- IDEA创建springboot项目:Unable to import maven project: See logs for details
- 大工20春《计算机文化基础》在线测试3,大工20春《计算机文化基础》在线测试3题目【标准答案】...
- 性能测试(01)-jmeter元件-线程组、调试取样器
- 如何使用IDEA 显示一个类的所有方法?与eclipse的outline视图类似
- 扫描枪读条码数据在单片机串口电路的读取与显示
- 快速弄懂内存字节对齐
- java如何写外键关联_JAVA基础:Hibernate外键关联与HQL语法
- Cortex - M3 位带别名首地址的计算方法
- 虚拟机硬盘启动计算机后黑屏,高手亲自教告诉你win7虚拟机启动后黑屏的操作方案...