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]));
效果图:
感谢大树的帮助。
相关推荐
JavaScript中的堆排序是一种基于比较的排序算法,它利用了数据结构中的“堆”这一概念,通常采用完全二叉树的形式。在完全二叉树中,堆可以分为两种类型:大顶堆和小顶堆。在大顶堆中,每个父节点的值都大于或等于其...
堆排序分为两个过程: 1.建堆。 堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用...
在编程领域,排序算法是计算机科学的基础之...而对于大规模数据,快速排序、归并排序或堆排序等更高效的方法则更为合适。同时,了解这些算法也能帮助开发者更好地理解高级数据结构和算法,为解决复杂问题打下坚实基础。
4. **堆排序**:堆排序是一种基于比较的排序算法,利用了完全二叉树的特性。首先构造一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,重复此过程。其平均时间复杂度为O(n log n)。 5. **插入排序**:...
系统自带的排序API,冒泡排序,快速排序,插入排序,选择排序,希尔排序,归并排序,堆排序,计数排序
本文将深入探讨堆的概念以及如何在JavaScript中实现堆排序算法。 堆通常是一个完全二叉树,其每个节点的值都大于或等于(最大堆)或小于或等于(最小堆)其子节点的值。这种性质使得堆可以方便地找到最大或最小的...
在JavaScript实现堆排序时,可以通过递归或迭代的方式来实现Max-Heapify函数,但递归方式由于需要调用栈,性能上会略微逊于迭代方式。 JavaScript代码实现堆排序的函数可以定义如下: ```javascript function ...
### JavaScript排序算法动画演示效果的实现方法 实现JavaScript排序算法动画演示效果是一个涉及前端技术栈的有趣话题。其核心在于如何将排序算法的每一步骤用动画的形式展示给用户,同时保证动画的流畅性和准确性。...
基于javascript的排序算法源码,包括冒泡排序、选择排序、希尔排序、插入排序、快速排序、归并排序、基数排序、堆排序
堆排序利用了完全二叉树的特性构建最大(或最小)堆,然后将堆顶元素与末尾元素交换并调整堆。它的时间复杂度为O(n log n),且是原地排序,无需额外空间。 在JavaScript中,这些排序算法可以通过函数实现,便于在...
在这个"JavaScript-使用javascript开发的排序算法-sorting.zip"压缩包中,很可能是包含了各种常见的排序算法实现,比如冒泡排序、插入排序、选择排序、快速排序、归并排序以及堆排序等。 1. **冒泡排序**:冒泡排序...
堆排序利用了堆数据结构的特性,将待排序数组构造成一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,缩小排序范围,再重新调整堆,直至整个数组有序。 7. **计数排序(Counting Sort)** 计数排序适用于非负...
堆排序利用了二叉堆的性质,将数组转化为一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,缩小排序范围。JavaScript实现如下: ```javascript function heapify(arr, n, i) { let largest = i; let left = 2 ...
在JavaScript中,堆排序可以通过创建数组并利用数组索引来实现。`main.js` 文件可能包含了如下代码示例: ```javascript function heapify(arr, n, i) { // ... 堆调整代码 } function heapSort(arr) { // ... ...
二进制堆排序是一种高效的排序算法,其基本思想是利用二叉堆的性质来实现数据的排序。在本文中,我们将深入探讨堆排序的原理、实现以及如何通过TDD(测试驱动开发)来构建自己的二进制堆排序算法。本文的重点是`...
最小/最大堆数据结构和堆排序算法的完整javascript实现。 最小堆 最大堆 目录 。叶子() 。尺寸() 。克隆() 。已验证() 。使固定() 。种类() 。清除() Heap.heapify(清单) Heap....