function heapSort(arr) { var len = arr.length; function swap(arr, rootIndex, maxIndex) { var temp = arr[rootIndex]; arr[rootIndex] = arr[maxIndex]; arr[maxIndex] = temp; } function diff(arr, index) { var leftIndex = 2 * index + 1; var rightIndex = 2 * index + 2; var maxIndex = index; if (leftIndex < len && arr[leftIndex] > arr[maxIndex]) { maxIndex = leftIndex } if (rightIndex < len && arr[rightIndex] > arr[maxIndex]) { maxIndex = rightIndex } if (maxIndex !== index) { swap(arr, index, maxIndex); diff(arr, maxIndex); } } for (var i = Math.floor(len / 2); i >= 0; i--) { diff(arr, i) } for (var j = len - 1; j >= 0; j--) { len--; swap(arr, 0, j); diff(arr, 0); } return arr; } console.log(heapSort([-4, 8, 6, 3, 0, 2, 5, -1, 4, 1]));
效果图:
感谢大树的帮助。
相关推荐
堆排序就是把先将父节点的最大数取出,并构建最大堆,再将堆继续调整为最大堆,再次将堆顶的最大数取出,这个过程持续到剩余数只有一个时结束。堆排序(Heap-Sort
堆排序分为两个过程: 1.建堆。 堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用...
列举了多种排序方法,包括快速排序,锦标赛排序,堆排序和归并排序
堆排序
系统自带的排序API,冒泡排序,快速排序,插入排序,选择排序,希尔排序,归并排序,堆排序,计数排序
基于javascript的排序算法源码,包括冒泡排序、选择排序、希尔排序、插入排序、快速排序、归并排序、基数排序、堆排序
以图文详解Heap Sort堆排序算法及JavaScript的代码实现,堆排序算法基于类二叉树的堆数据结构,需要的朋友可以参考下
js排序算法实现 包括以下算法:冒泡排序 选择排序 插入排序 谢尔排序 快速排序(递归) 快速排序(堆栈) 归并排序 堆排序 从执行时间上可以很直观地看出各种排序的效率
下面小编就为大家带来一篇JavaScript排序算法动画演示效果的实现方法。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
堆堆和堆排序的Javascript实现
最小/最大堆数据结构和堆排序算法的完整javascript实现。 最小堆 最大堆 目录 。叶子() 。尺寸() 。克隆() 。已验证() 。使固定() 。种类() 。清除() Heap.heapify(清单) Heap....
利用python,JavaScript,java,go,PHP等实现: 冒泡排序 选择排序 插入排序 希尔排序 归并排序 快速排序 堆排序 计数排序 桶排序 基数排序
十大经典排序算法 (1)多种编程语言,JavaScript,python,go,php等语言。 (2)排序算法可以分为内部排序...常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序
public static void main(String[] args) { // TODO Auto-generated method stub Sort s=new Sort(); int[] arr = { 3, 44, 38, 5, 47, 15, 36, 26, 27, ...//堆排序 System.out.println(Arrays.toString(arr)); }
堆排序 基数排序 用法 var SortAlgorithm = require ( 'sortAlgorithm' ) ; var sort = new SortAlgorithm ( ) ; sort . bubbleSort ( [ 3 , 1 , 2 , 5 , 4 ] ) ; // return [1,2,3,4,5] var people = [ { name : '...
常见的内部排序算法有:插入排序、希尔排序、选择排序、冒泡排序、归并排序、快速排序、堆排序、基数排序等。用一张图概括: 关于时间复杂度: 平方阶 (O(n2)) 排序 各类简单排序:直接插入、直接选择和冒泡排序。...
js代码-堆排序(将比较结果保存下来) 完全二叉树 双亲节点 i / 2 双亲子女的关系: 2i 和 2i + 1
最近因为工作需要,要深入的学习JavaScript,发现如果囫囵吞枣印象就是不...本文主要是详解堆的javascript实现方法,另外堆排序对我们来说太耳熟而又少用的情况下,本文当作一次复习。感兴趣的朋友们下面来一起看看吧。