【排序】桶排序

1,桶排序是稳定的

2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下

3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法

思路:

给个数组a,遍历数组a,取出最大的数,申请一个新数组(桶数组),长度为最大的数加1。

将带排序数组中的数,映射到每个桶数组中,桶中记录个数。

遍历同数组,依次取出数字(跳过空桶)。

时间: 2024-10-03 13:20:25

【排序】桶排序的相关文章

【啊哈!算法】最快最简单的排序——桶排序

转自:http://bbs.ahalei.com/thread-4399-1-1.html 最快最简单的排序——桶排序 在我们生活的这个世界中到处都是被排序过的.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序……总之很多东西都需要排序,可以说排序是无处不在.现在我们举个具体的例子来介绍一下排序算法. 首先出场的我们的主人公小哼,上面这个可爱的娃就是啦.期末考试完了老师要将同学们的分数按照从高到低排序.小哼的班上只有5个同学,这5个

浅识排序----桶排序

排序,说起来每个人都不陌生.在我们生活中也可以看到很多排序的例子,比如你去超市要按到来的时间早晚排队啦,又比如你去买彩票要选号码啦--总之,这个社会的所有事情都有法则,而排序正是我们去实现这些法则的有效途径. 对我们来说,排序,是一堆数据的有序排列,看似十分简单的事,我们如果能够把它做到高效,才算完美. 桶排序 因为是初学,现在我们来简单说一说什么叫做桶排序. 先举个栗子... 比如说我们班有10个同学参加考试,考试的满分是10分,现在全班同学的分数是乱的,老师要求你将成绩从小大到大排列起来,应

计数排序-桶排序-基数排序

计数排序 计数排序的实现主要是数据样本的特殊性(正整数,明确最大边界)和利用列表索引位置来记录值,索引值来统计个数 最后循环索引,根据值(个数)确定添加多少个 import time def cal_time(func): def wrapper(*args, **kwargs): t1 = time.time() result = func(*args, **kwargs) t2 = time.time() print("%s running time: %s secs." % (f

世界上最快最简单的排序——桶排序

今天又是无趣的寒假之中的一天,但是,我准备好好开始学习算法了,我是想每天至少学习一种算法,也不知道能不能坚持下来,反正先试试,万一呢?! 世界上有好多东西都是需要排序的 栗子one:给你一串在十以内的数字进行降序排列 最好就是在输入时就进行归类,可以设一个a[11]的数组,放进去,最后再通过循环输出 #include <stdio.h> int main() { int a[11],i,j,t; for(i=0;i<=10;i++) a[i]=0; //初始化为0 for(i=1;i&l

Python实现数据结构和算法之桶排序

桶排序 桶排序从 1956 年就开始被使用,该算法的基本思想是由E.J.Issac 和 R.C.Singleton 提出来的. 这个算法就好比有 11 个桶,编号从 0~10.每出现一个数,就在对应编号的桶中放一个小旗子,最后只要数数每个桶中有几个小旗子就 OK 了.例如 2 号桶中有 1 个小旗子,表示2 出现了一次;3 号桶中有 1 个小旗子,表示 3 出现了一次;5 号桶中有 2 个小旗子,表示 5出现了两次;8 号桶中有 1 个小旗子,表示 8 出现了一次. 代码 1 def main(

桶排序和计数排序

突然想自己写个桶排序,然后做课后题又发现了计数排序,觉得挺有趣的.不过书上都没有给代码,所以就自己写了一下代码,超级烂0 0下面先简单介绍下这两种排序 桶排序 桶排序,就是根据散列的思想进行数据的排序.假设有M个桶,采用最简单的hash(key)=key,这样无需比较,就可以把数存入相应的桶中.针对冲突排解问题,此时查找链的方式显然不再适用,采用独立链法,把每个桶以链表的形式存储雷同元素,定义相同元素的偏序,这样能实现排序的稳定性.桶排序完全采用了简单的哈希策略,是比较容易理解的.同时,完全摒弃

排序(二)键索引、桶排序、位示图、败者树等

排序(二) 以上排序算法都有一个性质:在排序的最终结果中,各元素的次序依赖于它们之间的比较.我们把这类排序算法称为比较排序. 任何比较排序的时间复杂度的下界是nlgn. 以下排序算法是用运算而不是比较来确定排序顺序的.因此下界nlgn对它们是不适用的. 键索引计数法(计数排序) 计数排序假设n个输入元素中的每一个都是在0到k区间的一个整数,其中k为某个整数. 思想:对每一个输入元素x,确定小于x的元素个数.利用这一信息,就可以直接把x放到它在输出数组中的位置了. 例如: 学生被分为若干组,标号为

计数排序、桶排序python实现

计数排序在输入n个0到k之间的整数时,时间复杂度最好情况下为O(n+k),最坏情况下为O(n+k),平均情况为O(n+k),空间复杂度为O(n+k),计数排序是稳定的排序. 桶排序在输入N个数据有M个桶时,如果每个桶的数据接近N/M个且桶内使用基于比较的排序,则桶排序的时间复杂度为O(N+M*N/M*log(N/M)).如果N=M时,每个桶只有一个数据,时间复杂度降低为O(N). 桶排序的时间复杂度为O(N+M),桶排序是稳定的排序 1.计数排序 计数排序介绍及C语言实现在:计数排序(链接) d

算法导论-- 线性时间排序(计数排序、基数排序、桶排序)

线性时间排序 前面介绍的几种排序,都是能够在复杂度nlg(n)时间内排序n个数的算法,这些算法都是通过比较来决定它们的顺序,这类算法叫做比较排序 .下面介绍的几种算法用运算去排序,且它们的复杂度是线性时间. -------------------------------------- 1.计数排序 计数排序采用的方法是:对每个元素x,去确定小于x的元素的个数,从而就可以知道元素x在输出数组中的哪个位置了. 计数排序的一个重要性质是它是稳定的,即对于相同的两个数,排序后,还会保持它们在输入数组中的

排序算法一:桶排序

在我们的生活的这个世界到处都是被排序过的东西.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序--可以说排序无处不在.今天简单讲讲最快最简单的排序--桶排序. 尝试一下输入n个0~1000之间的整数,将它们从大到小排序. 代码实现如下: #include <stdio.h> int main() { //桶排序 //先确定变量 //赋初始值 //循环输入数值 //循环输出数值 printf("桶排序\n");