博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
桶排序
阅读量:6214 次
发布时间:2019-06-21

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

hot3.png

1、定义

    箱排序的变种。为了区别于上述的箱排序,姑且称它为桶排序(实际上箱排序和桶排序是同义词)。

2、基本思想

    桶排序的思想是把[0,1)划分为n个大小相同的子区间,每一子区间是一个桶。然后将n个记录分配到各个桶中。因为关键字序列是均匀分布在[0,1)上的,所以一般不会有很多个记录落入同一个桶中。由于同一桶中的记录其关键字不尽相同,所以必须采用关键字比较的排序方法(通常用插入排序)对各个桶进行排序,然后依次将各非空桶中的记录连接(收集)起来即可。

    注意:

    这种排序思想基于以下假设:假设输入的n个关键字序列是随机分布在区间[0,1)之上。若关键字序列的取值范围不是该区间,只要其取值均非负,我们总能将所有关键字除以某一合适的数,将关键字映射到该区间上。但要保证映射后的关键字是均匀分布在[0,1)上的。

3、桶排序算法

    伪代码算法为:

void BucketSon(R)     { //对R[0..n-1]做桶排序,其中0≤R[i].key<1(0≤i

 注意:

    实现时需设置一个指针向量B[0..n-1]来表示n个桶。但因为任一记录R[i]的关键字满足:0≤R[i].key<1(0≤i≤n-1),所以必须将R[i].key映射到B的下标区间[0,n-1)上才能使R[i]装入某个桶中,这可通过└n*(R[i].key)┘来实现。

4、桶排序算法分析

    桶排序的平均时间复杂度是线性的,即O(n)。但最坏情况仍有可能是O(n2)。

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

    【例】n=10,被排序的记录关键字ki取值范围是0到99之间的整数(36,5,16,98,95,47, 32,36,48)时,要用100个箱子来做一趟箱排序。(即若m=n2时,箱排序的时间O(m+n)=O(n2))。

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

你可能感兴趣的文章
递归算法的时间复杂度
查看>>
BCGControlBar教程:将MFC控件的BCGControlBar / BCGSuite添加到对话框中
查看>>
PyCharm入门教程——在编辑器中打开和重新打开文件
查看>>
分布式系统理论概述
查看>>
传统IDC部署网站(六)
查看>>
zookeeper: 分布式锁的实现
查看>>
Gearman Worker自恢复方案
查看>>
phalapi-进阶篇3(自动加载和拦截器)
查看>>
nginx配置
查看>>
[Yii Framework] spl_autoload_register 导致加载顺序冲突
查看>>
OSChina 周二乱弹 —— 糟糕 是喵动的感觉
查看>>
OSChina 周三乱弹 —— 野生公交车正在河边喝水
查看>>
【NGINX】虚拟主机配置示例
查看>>
OSX BASH 漏洞修复指南
查看>>
Android获取程序大小及程序缓存大小
查看>>
web.xml常用标签命令详解
查看>>
#location解读
查看>>
golang -- channel使用
查看>>
git 日常命令
查看>>
java5的线程锁技术
查看>>