博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
箱排序(Bin Sort)
阅读量:5799 次
发布时间:2019-06-18

本文共 868 字,大约阅读时间需要 2 分钟。

hot3.png

1、基本思想

    排序过程无须比较关键字,而是通过"分配"和"收集"过程来实现排序.它们的时间复杂度可达到线性阶:O(n)。

    箱排序也称桶排序(Bucket Sort),其基本思想是:设置若干个箱子,依次扫描待排序的记录R[0],R[1],…,R[n-1],把关键字等于k的记录全都装入到第k个箱子里(分配),然后按序号依次将各非空的箱子首尾连接起来(收集)。

    【例】要将一副混洗的52张扑克牌按点数A<2<…<J<Q<K排序,需设置13个"箱子",排序时依次将每张牌按点数放入相应的箱子里,然后依次将这些箱子首尾相接,就得到了按点数递增序排列的一副牌。

2、箱排序中,箱子的个数取决于关键字的取值范围

     若R[0..n-1]中关键字的取值范围是0到m-1的整数,则必须设置m个箱子。因此箱排序要求关键字的类型是有限类型,否则可能要无限个箱子。

3、箱子的类型应设计成链表为宜

     一般情况下每个箱子中存放多少个关键字相同的记录是无法预料的,故箱子的类型应设计成链表为宜。

4、为保证排序是稳定的,分配过程中装箱及收集过程中的连接必须按先进先出原则进行

(1) 实现方法一

    每个箱子设为一个链队列。当一记录装入某箱子时,应做人队操作将其插入该箱子尾部;而收集过程则是对箱子做出队操作,依次将出队的记录放到输出序列中。

(2) 实现方法二

    若输入的待排序记录是以链表形式给出时,出队操作可简化为是将整个箱子链表链接到输出链表的尾部。这只需要修改输出链表的尾结点中的指针域,令其指向箱子链表的头,然后修改输出链表的尾指针,令其指向箱子链表的尾即可。

5、算法分析

    分配过程的时间是O(n);收集过程的时间为O(m) (采用链表来存储输入的待排序记录)或O(m+n)。因此,箱排序的时间为O(m+n)。若箱子个数m的数量级为O(n),则箱排序的时间是线性的,即O(n)。

    注意:

    箱排序实用价值不大,仅适用于作为基数排序(下节介绍)的一个中间步骤。

转载于:https://my.oschina.net/u/2312175/blog/669017

你可能感兴趣的文章
一个快速的开发框架Wabacus
查看>>
Spring Test+JUnit完美组【使用Spring测试套件】
查看>>
Llinux 编译安卓 “android list targets 无target显示” 的解决方法
查看>>
Java NIO
查看>>
李炎恢老师XHTML视频教程(90课时)[已完结]
查看>>
我的友情链接
查看>>
JavaScript基础(三)运算符和数据类型转换
查看>>
shell getopt
查看>>
集团电话术语整理
查看>>
分布式消息队列中间件系列研究之阿堂教程(基础篇-Local模式)
查看>>
异常、堆内存溢出、OOM的几种情况
查看>>
linux基础--Bash逻辑控制语句
查看>>
C语言函数:用位运算交换的方法交换两个变量值
查看>>
linux下各种高负载与VIP
查看>>
Moosefs分布式文件系统的搭建与维护
查看>>
ubuntu 安装saltops
查看>>
瑞星网络版防病毒软件For Linux通过银河麒麟产品兼容性测试
查看>>
JSP_通过表格显示数据库的信息
查看>>
vSphere 6将于2月2日全球同步发表
查看>>
D:\apache-tomcat-7.0.61\webapps\xxx does not exist or is not a readable directory
查看>>