美文网首页js数据结构和算法
堆排序的堆类 --- Javascript实现

堆排序的堆类 --- Javascript实现

作者: mvlg | 来源:发表于2020-07-24 02:27 被阅读0次

堆排序

  1. 最大堆(儿子皆小于双亲)
  2. 最小堆(双亲皆小于儿子)

堆建立

  1. 构建堆调整函数(调整范围,索引以下的部分,至少包含子结点)
  2. 构建的位置是最后叶子节点的双亲
  3. 最后叶子的双亲计算 (len / 2)- 1
  4. 从后往前,从下往上,确保最小堆的最小值的精准性,保证扫描范围的全面性。

堆取值

  1. 取值后会产生缺值的现象:(1)填值(2)重构
  2. 填值只需要单次调整,即可恢复最小堆

堆实现

class Heap
{
    constructor (heapArr)
    {
        this.heap = heapArr
    }
    setHeapVal = (key, val) => this.heap[key] = val
    adjustMaxHeap (sta, end)
    {
        let temp = this.heap[sta]
        for (let i = 2 * sta + 1; i < end; i = i * 2 + 1)
        {
            if (i + 1 < end && this.heap[i] < this.heap[i + 1]) i++
            if (temp >= this.heap[i]) break
            this.heap[sta] = this.heap[i]
            sta = i
        }
        this.heap[sta] = temp
    }
    adjustMinHeap (sta, end)
    {
        let temp = this.heap[sta]
        for (let i = 2 * sta + 1; i < end; i = i * 2 + 1)
        {
            if (i + 1 < end && this.heap[i] > this.heap[i + 1]) i++
            if (temp <= this.heap[i]) break
            this.heap[sta] = this.heap[i]
            sta = i
        }
        this.heap[sta] = temp
    }
    createMaxHeap ()
    {
        for (let i = Math.floor(this.heap.length / 2) - 1; i >= 0; i--)
        {
            this.adjustMaxHeap(i, this.heap.length)
        }
    }
    createMinHeap ()
    {
        for (let i = Math.floor(this.heap.length / 2) - 1; i >= 0; i--)
        {
            this.adjustMinHeap(i, this.heap.length)
        }
    }
}

module.exports = { Heap }

堆排序

代码请看内部排序里选择排序的堆排序
https://www.jianshu.com/p/16423d3e4fd9

相关文章

  • 堆排序的堆类 --- Javascript实现

    堆排序 最大堆(儿子皆小于双亲) 最小堆(双亲皆小于儿子) 堆建立 构建堆调整函数(调整范围,索引以下的部分,至少...

  • 堆排序的实现

    用大顶堆实现堆排序

  • HeapSort堆排序详解

    本文我们来学习下堆排序的实现原理,堆排序顾名思义就是利用了堆的特点来实现排序,首先了解堆是什么? 堆相关的一些概念...

  • python实现堆排序(HeapSort)

    python实现【堆排序】(HeapSort) 算法原理及介绍 堆排序(Heapsort)是指利用堆这种数据结构所...

  • 堆排序(堆的建立,维护,和排序)

    1、前言 本文使用了Swift语言来实现了堆排序中的三个重要函数:1、维护堆属性;2、建立堆;3、堆排序。 2、代...

  • 排序

    八大排序算法 一、归并排序 递归及非递归的JAVA实现 二、快速排序 快排算法JAVA实现 三、堆排序 堆排序堆排...

  • 堆排序

    一、定义 堆排序(Heap Sort)是一种基于优先队列(堆实现)的排序方式。堆排序的步骤如下: 初始时待排序元素...

  • Java排序算法 - 堆排序

    堆排序 堆排序是基于堆这种数据结构的一种排序算法,通过每一次弹出堆顶元素,实现排序。预备知识: 堆是一棵完全二叉树...

  • Javascript和堆排序

    前言 这里以递归为例,参考自慕课网刘波波老师的C++版本实现 普通堆排序(实现了一个完整的堆) 普通的堆排序首先肯...

  • 排序算法08:优先队列与堆排序

    堆排序一种是基于二叉堆的排序。本文将从优先队列讲起,循序渐进的实现堆排序。这也是《算法》第四版上讲解堆排序的大致章...

网友评论

    本文标题:堆排序的堆类 --- Javascript实现

    本文链接:https://www.haomeiwen.com/subject/lcyrlktx.html