堆排序(Heapsort)是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点。
堆排序的平均时间复杂度为Ο(nlogn) 。

算法步骤:
1、创建一个堆H[0…n-1]
2、把堆首(最大值)和堆尾互换
3、把堆的尺寸缩小1,并调用shift_down(0),目的是把新的数组顶端数据调整到相应位置
4、 重复步骤2,直到堆的尺寸为1

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><script>function heapSort() {let len = arr.length - 1;for (let i = Math.floor((len - 1) / 2); i >= 0; i--)adjust(i, len);for (let i = len; i > 0; i--) {swap(0, i);adjust(0, i - 1);}}function adjust(left, right) {let lchild = left * 2 + 1,max = lchild;if (lchild > right)return;if (lchild + 1 <= right && arr[lchild + 1] > arr[lchild])max++;if (arr[max] > arr[left]) {swap(max, left);adjust(max, right);}}function swap(i, j) {let t = arr[i];arr[i] = arr[j];arr[j] = t;}let arr = [5, 4, 8, 9, 7, 2, 3, 1, 6];heapSort();console.log(arr); //[1,2,3,4,5,6,7,8,9]</script></body>
</html>

Javascript堆排序相关推荐

  1. JavaScript实现heapsort堆排序算法(附完整源码)

    JavaScript实现heapsort堆排序算法(附完整源码) Heap.js完整源代码 MinHeap.js完整源代码 Comparator.js完整源代码 Sort.js完整源代码 HeapSo ...

  2. javascript知识点

    一些开放性题目 1.自我介绍:除了基本个人信息以外,面试官更想听的是你与众不同的地方和你的优势. 2.项目介绍 3.如何看待前端开发? 4.平时是如何学习前端开发的? 5.未来三到五年的规划是怎样的? ...

  3. JavaScript,25 岁生日快乐!

    1995 年 12 月 4 日,网景和 Sun 发表了一份联合声明,宣布推出 JavaScript.它是一种开放的.跨平台的.易于使用的对象脚本语言,用于在企业网络和互联网上实时创建和定制应用程序.历 ...

  4. JavaScript实现十种经典排序算法(js排序算法)

    冒泡排序算法 冒泡排序(Bubble Sort)是一种简单直观的排序算法.冒泡排序算法的步骤描述如下: 比较相邻的元素.如果第一个比第二个大,就交换他们两个. 对每一对相邻元素作同样的工作,从开始第一 ...

  5. 六种排序算法的JavaScript实现以及总结

    最近几天在系统的复习排序算法,之前都没有系统性的学习过,也没有留下过什么笔记,所以很快就忘了,这次好好地学习一下. 首先说明为了减少限制,以下代码通通运行于Node V8引擎而非浏览器,源码在我的Gi ...

  6. JavaScript实现10大算法可视化

    参考博客: https://www.cnblogs.com/Unknw/p/6346681.html#4195503 十大经典算法 一张图概括: 名词解释: n:数据规模 k:"桶" ...

  7. 【数据结构与算法】多种语言(VB、C、C#、JavaScript)系列数据结构算法经典案例教程合集目录

    文章目录 1. 专栏简介 2. 专栏地址 3. 专栏目录 1. 专栏简介 2. 专栏地址 「 刘一哥与GIS的故事 」之<数据结构与算法> 3. 专栏目录 [经典回放]多种语言系列数据结构 ...

  8. JavaScript常用算法

    一.排序算法 1.Array.sort(function)(JavaScript原生排序算法) 参数:比较函数(可选) 若无参数,则按照首字母的ASCII码排序,比较函数的作用为确定排序 functi ...

  9. 十大排序算法:冒泡排序、选择排序、插入排序、希尔排序、归并排序、快速排序、堆排序、计数排序、桶排序、基数排序

    冒泡排序.选择排序.插入排序.希尔排序.归并排序.快速排序.堆排序.计数排序.桶排序.基数排序的动图与源代码. 目录 关于时间复杂度 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 ...

最新文章

  1. springboot打成jar后获取classpath下的文件
  2. 算法工程师当前选哪个方向好?
  3. iOS-项目打包为ipa文件
  4. 从反编译的角度去观察C#6.0
  5. android ViewPager 实现点击小圆点切换页面 案例
  6. 杭电oj1003java实现
  7. MyEclipse 清理项目缓存的几大方法
  8. 什么?物联网方向也能发论文了?
  9. 【转】高性能WEB开发系列之重绘与回流
  10. 用python可以画的可爱的图形_利用Python绘制诱人的桑基图
  11. Mozilla 开源支持计划:首批捐助 7 开源项目 50 万美元
  12. Python程序异常处理:try、except、else、finally,捕获指定异常类型、捕获多个异常类型、捕获所有异常类型、捕获异常信息、异常的传递、raise抛出自定义异常
  13. wordpress调用 php文件上传,wordpress上传的文件在哪
  14. django上课笔记6-MVC,MTV架构-中间件-初识Form组件
  15. 职场中相信“付出总有回报”的人,后来都怎么样了?
  16. CrossWalk - Android 动态加载so库文件
  17. 【vue期末作业】化妆品商城系统
  18. Unity实现多屏显示
  19. 重点| 系统集成项目管理工程师考前50个知识点(5)
  20. 解除锁定的等sql语句

热门文章

  1. 近 10 年新秀编程语言大 PK,Pick 它!
  2. 20 道必看的 Vue 面试题 | 原力计划
  3. Python 分析国庆热门旅游景点,告诉你哪些地方好玩、便宜、人又少!
  4. 程序员疯狂记事:如何利用众多技术栈构建一个 Web 应用程序?!
  5. Google Flutter 一统移动、Web、桌面、嵌入式江湖!
  6. 微软与开源,化干戈为玉帛
  7. 一行代码蒸发了 ¥6,447,277,680 人民币!
  8. 8个深度学习方面的最佳实践
  9. 枯燥编程加奇炫美术 —— 看育碧 Ubisoft 如何开发游戏大作
  10. 计算机科学全程,EduGlobalB2B德保罗大学金融计算机科学硕士桥梁STEM全程免GREGMAT...