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.建堆。 堆实质上是完全二叉树,必须满足:树中任一非叶子结点的关键字均不大于(或不小于)其左右孩子(若存在)结点的关键字。 堆分为:大根堆和小根堆,升序排序采用大根堆,降序排序采用...
堆排序(Heap Sort)是一种基于堆数据结构的比较排序算法。堆是一个近似完全二叉树的结构,并同时满足堆性质:即子节点的键值或索引总是小于(或大于)它的父...压缩包文档记录的是一个用JavaScript实现堆排序的示例。
这里我们主要探讨四种排序方法:插入排序、快速排序、堆排序和归并排序。 1. **插入排序**: - **直接插入排序**:是最简单的排序方式之一,每次将一个待排序的元素与已排序序列中的元素依次比较,找到合适的位置...
在编程领域,排序算法是计算机科学的基础之...而对于大规模数据,快速排序、归并排序或堆排序等更高效的方法则更为合适。同时,了解这些算法也能帮助开发者更好地理解高级数据结构和算法,为解决复杂问题打下坚实基础。
4. **堆排序**:堆排序是一种基于比较的排序算法,利用了完全二叉树的特性。首先构造一个大顶堆或小顶堆,然后将堆顶元素与末尾元素交换,调整堆,重复此过程。其平均时间复杂度为O(n log n)。 5. **插入排序**:...
内容概要:本文深入解析了堆排序这种高效的基于堆数据结构的排序算法,重点介绍了它的基本思想,即利用二叉堆这一特性进行排序,并将其在五种流行的编程语言中实现了具体的代码示例,分别为JavaScript、Python、Go、...
系统自带的排序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) { // ... ...