十大经典排序算法
  • 十大经典排序算法-冒泡排序算法详解
  • 十大经典排序算法-选择排序算法详解
  • 十大经典排序算法-插入排序算法详解
  • 十大经典排序算法-希尔排序算法详解
  • 十大经典排序算法-快速排序算法详解
  • 十大经典排序算法-归并排序算法详解
  • 十大经典排序算法-堆排序算法详解
  • 十大经典排序算法-计数排序算法详解
  • 十大经典排序算法-桶排序算法详解
  • 十大经典排序算法-基数排序算法详解

一、什么是桶排序

1.概念

桶排序(Bucket sort)是计数排序算法的升级版,将数据分到有限数量的桶子里,然后每个桶再分别排序

2.算法原理

这是一个无序数列:11、38、8、34、27、19、26、13,我们要将它按从小到大排序

先创建5个桶,桶的区间跨度=(最大值-最小值)/桶的数量,注意,每个桶的范围都是包含最小值,不包含最大值,最后一个桶,既包含最小值,也包含最大值

遍历原始序列,将序列放入桶中

每个桶内部的元素分别排序

遍历所有桶,将桶中元素依次输出:8、11、13、19、26、27、34、38

此时,元素已是有序的了

3.算法实现

// 冒泡排序,桶内元素排序时使用到
function bubbleSort(arr) {let length = arr.length;// 优化2,记录无序数列的边界,每次比较只需要比到这里为止let lastExchangeIndex = 0;let sortBorder = length - 1;for (let i = 0; i < length - 1; i++) {// 优化1,isSorted判断是否有序,已经有序,不需要再继续交换let isSorted = true;for (let j = 0; j < sortBorder; j++) {if (arr[j] > arr[j + 1]) {[arr[j], arr[j + 1]] = [arr[j + 1], arr[j]];isSorted = false;lastExchangeIndex = j;}}sortBorder = lastExchangeIndex;if (isSorted) {break;}}
}// 桶排序
function sort(arr) {// 得到数列的最大值、最小值,并计算差值dlet max = arr[0];let min = arr[0];for (let item of arr) {if (item > max) {max = item;}if (item < min) {min = item;}}let d = max - min;// 初始化桶let bucketNum = 5;let bucketArr = [];for (let i = 0; i < bucketNum; i++) {bucketArr.push([]);}// 遍历原始数组,将原始放入桶中for (let item of arr) {let index = parseInt((item - min) * bucketNum / d);if (index === bucketNum) {index--;}bucketArr[index].push(item);}// 对每个桶进行排序,这里用了冒泡排序法for (let itemArr of bucketArr) {bubbleSort(itemArr);}// 遍历桶,得到排序后结果let index = 0;let sortArr = [];for (let itemArr of bucketArr) {for (let item of itemArr) {sortArr[index++] = item;}}return sortArr;
}let arr = [11, 38, 8, 34, 27, 19, 26, 13];
let sortArr = sort(arr);
console.log(sortArr);

三、桶排序算法特点

1.时间复杂度

桶排序算法遍历了2次原始数组,运算量为2N,最后,遍历桶输出排序结果的运算量为N,初始化桶的运算量为M。

对桶进行排序,不同的排序算法算法复杂度不同,冒泡排序算法复杂度为O(N^2),堆排序、归并排序算法复杂度为O(NlogN),我们以排序算法复杂度为O(NlogN)进行计算,运算量为N/M*log(N/M)*M

最终的运算量为3N+M+N/M*log(N/M)*M,即3N+M+N(logN-logM),去掉系数,时间复杂度为O(N+M+N(logN-logM))

2.空间复杂度

桶排序算法排序过程中新建了一个桶和一个输出数组,所以算法的空间复杂度是O(N+M)

3.稳定性

桶排序算法在对每个桶进行排序时,选择稳定的排序算法,则排序后,相同元素的位置不会发生改变,所以桶排序算法是一种稳定的排序算法

十大经典排序算法-桶排序算法详解相关推荐

  1. 【完整可运行源码+GIF动画演示】十大经典排序算法系列——冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    以前也零零碎碎发过一些排序算法,但总是不系统, 这次彻底的对排序系列做了一个整体的规划, 小伙伴们快快mark哦~ [GIF动画+完整可运行源代码]C++实现 冒泡排序--十大经典排序算法之一 [GI ...

  2. C++实现桶排序——十大经典排序算法之九【GIF动画+完整代码+详细注释】

    十大经典排序算法系列博客-->传送门 桶排序是计数排序的升级版.它利用了函数的映射关系,高效与否的关键就在于这个映射函数的确定.桶排序 (Bucket sort)的工作的原理:假设输入数据服从均 ...

  3. 十大经典排序算法详解(三)-堆排序,计数排序,桶排序,基数排序

    养成习惯,先赞后看!!! 你的点赞与关注真的对我非常有帮助.如果可以的话,动动手指,一键三连吧!!! 十大经典排序算法-堆排序,计数排序,桶排序,基数排序 前言 这是十大经典排序算法详解的最后一篇了. ...

  4. 十大经典排序算法动画与解析,看我就够了

    作者 | 程序员小吴 转载自五分钟学算法(ID: CXYxiaowu) 排序算法是<数据结构与算法>中最基本的算法之一. 排序算法可以分为内部排序和外部排序.内部排序是数据记录在内存中进行 ...

  5. 十大经典排序算法(建议收藏)

    来自:Damonare的个人博客 原文:http://blog.damonare.cn/2016/12/20/十大经典排序算法总结(javascript描述)/ 0.算法概述  0.1 算法分类 十种 ...

  6. python经典排序_python实现十大经典排序算法

    写在前面 本文参考十大经典排序算法(动图演示),这篇文章有动图显示,介绍的很详细.本文是部分内容有借鉴此博客,用python实现,有一些改进. 各种算法的时间.空间复杂度 1.冒泡排序 1.比较相邻的 ...

  7. 【Python】用Python实现十大经典排序算法

    来源:Python数据之道 (ID:PyDataLab) 作者:阳哥 大家好,我是阳哥. 最近一段时间,我在微信视频号「Python数据之道」上陆陆续续发布了10种经典排序算法的动画实现. 今天,想以 ...

  8. 教小学妹学算法:十大经典排序算法深度解析

    最近有一位小学妹 Coco 入坑了算法,结果上来就被几个排序算法给整懵逼了,各种排序眼花缭乱,也分不清什么时候该用什么排序了. 今天呢,就在这分享一下我给小学妹讲十大经典排序算法的过程. 好吧,那我们 ...

  9. 终于,把十大经典排序算法汇总了!(Java实现版)

    转载自  终于,把十大经典排序算法汇总了!(Java实现版) 最近几天在研究排序算法,看了很多博客,发现网上有的文章中对排序算法解释的并不是很透彻,而且有很多代码都是错误的,例如有的文章中在" ...

最新文章

  1. matlab导入txt数据_如何正确的将txt文本数据导入到Word中使用?
  2. python编程零基础免费网课-Python网课推荐——免费学习Python编程
  3. 弱类型语言的优势:C#的委托概念在Javascript中的实现
  4. 会计科目登错怎么更正
  5. 关于如何使用xposed来hook微信软件
  6. 随想录(ccpp之间的相互调用)
  7. sql学习指南_SQL格式功能的全面指南
  8. 转:完全卸载Oracle方法
  9. python编辑距离正则匹配_详解一道腾讯面试题:编辑距离
  10. Tomcat Session Clustering
  11. 【BZOJ2460】元素(线性基---(id,value)绑定,求id异或非0对应的最大value 和)
  12. vep文件如何转换mp4_VEP视频文件怎么转换成普通视频文件?
  13. Spring框架爆RCE 0day漏洞的临时解决方案
  14. sketchup边线设置_草图大师SketchUp改变模型边线颜色的方法
  15. 帝国 cms 列表 php,常用帝国cms目录结构分享
  16. 局域网内,两台电脑时间同步
  17. 人工智能会终结就业吗之《AI极简经济学》
  18. 预装64位Win8/8.1电脑安装64位Win7详细过程(单/双系统)
  19. c226打印机驱动安装_打印机驱动怎么安装?国产操作系统安装打印驱动方法图文步骤详解...
  20. ssd 分区4k对齐 linux,Debian SSD ext4 4K对齐

热门文章

  1. 【云享M密码】与云享M1初恋,我是不是有“瘾”了
  2. JS input 文本框事件
  3. 删除chrome中特定的搜索记录
  4. python写代码工具_AI辅助写代码,Python之父都爱不释手的工具
  5. 计算机组播相关服务,Windows Server 2008 R2 之十八WDS(部署服务)之二
  6. docker安装redis(镜像安装)
  7. CQOI 2016 day1日志
  8. 三国志战略版:Daniel_主将甘宁-会心队伍的探讨
  9. Android 个性化控件整理
  10. 在绝望中寻找希望-下篇 写给生活