经典排序算法(二)--桶排序Bucket Sort
补充说明三点
1,桶排序是稳定的
2,桶排序是常见排序里最快的一种,比快排还要快…大多数情况下
3,桶排序非常快,但是同时也非常耗空间,基本上是最耗空间的一种排序算法
我自己的理解哈,可能与网上说的有一些出入,大体都是同样的原理
无序数组有个要求,就是成员隶属于固定(有限的)的区间,如范围为[0-9](考试分数为1-100等)
例如待排数字[6 2 4 1 5 9]
准备10个空桶,最大数个空桶
[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 0 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
1,顺序从待排数组中取出数字,首先6被取出,然后把6入6号桶,这个过程类似这样:空桶[ 待排数组[ 0 ] ] = 待排数组[ 0 ]
[6 2 4 1 5 9] 待排数组
[0 0 0 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
2,顺序从待排数组中取出下一个数字,此时2被取出,将其放入2号桶,是几就放几号桶
[6 2 4 1 5 9] 待排数组
[0 0 2 0 0 0 6 0 0 0] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
3,4,5,6省略,过程一样,全部入桶后变成下边这样
[6 2 4 1 5 9] 待排数组
[0 1 2 0 4 5 6 0 0 9] 空桶
[0 1 2 3 4 5 6 7 8 9] 桶编号(实际不存在)
0表示空桶,跳过,顺序取出即可:1 2 4 5 6 9
C#代码演示
//待排数组
var unsorted = new int[] { 6, 2, 4, 1, 5, 9 };
//分配空桶
var buget = new int[10];
//直接以每个待排数字为索引,将自己的值赋值给当前桶
for (int i = 0; i < unsorted.Length; i++)
{
buget[unsorted[i]] = unsorted[i];
}
//跳过值为0的空桶,顺序输出即可
for (int i = 0; i < buget.Length; i++)
{
if (buget[i] > 0)
Console.WriteLine(buget[i]);
}
经典排序算法(二)--桶排序Bucket Sort相关推荐
- 经典白话算法之桶排序
最快最简单的排序--桶排序 在我们生活的这个世界中到处都是被排序过的.站队的时候会按照身高排序,考试的名次需要按照分数排序,网上购物的时候会按照价格排序,电子邮箱中的邮件按照时间排序--总之很多东西都 ...
- 排序算法:桶排序、计数排序、基数排序
相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 这篇博客将主要介绍三种时间复杂度是 ...
- 排序算法之--桶排序(桶,像桶一样的排序,听起来很有趣哦0。0)
排序算法之--桶排序 桶排序的工作的原理是将数组分到有限数量的桶子里,而这个有限数量是指多少个呢? 不急,容我细细道来:我们可以先求出这个数组的最大值和最小值,那么桶的数量就是max-min+1咯 为 ...
- 常用排序算法(八)桶排序
桶排序 概要 本章介绍排序算法中的桶排序.内容包括: 1. 桶排序介绍 2. 桶排序图文说明 3. 桶排序实现 3.1 桶排序C实现 3.2 桶排序C++实现 3.3 桶排序Java实现 转载请 ...
- c语言桶排序,排序算法之——桶排序
这是本人的第一篇随笔,为的是分享学习经验,和大家讨论一些算法,以便取得些许进步,也是对学习的总结. 话不多说,下面我会用图文的方式向各位介绍桶排序. 1.主要思想: 桶排序的大体思路就是先将数组分到有 ...
- 排序算法二:归并排序(Merge sort)
归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 1 private void merge_sort(int[] array, i ...
- 排序算法_桶排序(箱排序)
一.算法描述 假设有一组长度为N的待排关键字序列K[1....n]. 首先将这个序列划分成M个的子区间(桶). 然后基于某种映射函数 ,将待排序列的关键字k映射到第i个桶中(即桶数组B的下标 i) , ...
- 排序算法(7)----桶排序
桶排序: * 计数排序适合小范围的大量重复元素,而桶排序适合区间内尽可能随机的元素 * 它的思想是: * 把数据存在的区间划分为小的区间,就像桶一样,这些在一个桶中的数据在桶内排好序,再合并成排序 ...
- 常见的排序算法二——希尔排序
原理:被称为增量缩小排序.先将序列按增量划分为元素个数相同的若干组, 使用直接插入排序法进行排序,然后不断缩小增量直至为1, 最后使用直接插入排序完成排序. 要点:增量的选择以及排序最终以1为增量进行 ...
- c语言排序算法_C语言写排序算法(二) —— 选择排序
上次联系的算法是冒泡排序,不知道小伙伴们还记得不,中间穿插了一下比特币相关的分享,嘿嘿.今天来分享一下选择排序. 算法描述:选择排序是从数组中选择最大(小)的元素放到数组的最后一个,然后往前移,接着从 ...
最新文章
- 揭露Windows中各种不老实的服务
- SendMessage、PostMessage原理
- junit rule_使用JUnit的ExpectedException和@Rule测试自定义异常
- c++中运算符重载(加号运算,左移运算,前置后置++运算符,赋值运算,关系运算,函数运算)
- 森林怎么训练野人_138年前抓的“野人女孩”,最终命运如何?死前心愿让人心酸...
- MyCat分布式数据库集群架构工作笔记0020---高可用_单表存储千万级_海量存储_水平分表ER表
- 实现gabor filter的滤波
- Spring boot集成海康威视门禁设备
- java 实现图片转化为PDF
- vuex的commit和dispatch
- 小程序内配置公众号关注组件
- Flink学习1——运行时架构(standalone模式)
- 截图热键冲突:关闭360截图功能建议使用QQ截图
- 【原创】【狗眼看股】【2008-4-14】紧急更正:反弹的条件已不具备,后市看跌...
- Mac OS X,下载并安装ant
- 网站流量过大服务器不行,网站如何应对突然的大流量访问?
- 登陆QQ时总显示QQ安全防护进程,而且点了确定后QQ还是登不上
- ts 之 Pick 和 Omit
- delegate用法
- vue 范围拖选插件
热门文章
- (原創) 如何控制DE2 VGA輸出時某座標的顏色? (IC Design) (DE2) (Quartus II)
- 怎样进行云迁移 企业才不会后悔!
- Azure SQL作業
- 使用docker实现半自动化代码自动部署与回滚
- 通过消息跨进程发送与接收 TCopyDataStruct 数据 - 回复 skymesh
- ucOS学习--基础知识
- 使用RabbitMQ做的一些工作及经验教训
- linux下main函数的返回值问题
- 11.GitLab webhooks
- 13.docker exec