美文网首页
JavaScript的排序算法——堆排序

JavaScript的排序算法——堆排序

作者: 流浪的三鮮餡 | 来源:发表于2018-12-11 23:50 被阅读14次

堆排序(Heap Sort)

堆排序(Heap Sort)是一种基于比较的排序算法。堆排序可以被认为是一种改进版的排序算法,它将输出区域分为排序区域和未排序区域,并通过提取最大元素移动到排序区域来迭代缩小未排序区域。

堆排序(Heap Sort)
堆排序(Heap Sort)

复杂度

算法 最好情况 平均情况 最坏情况 空间复杂度 稳定性
堆排序 O(n log n) O(n log n) O(n log n) O(1) 不稳定

ES6实现

function HeapSort(arr) {
  let heapSize = arr.length;
  buildHeap(arr);
  while(heapSize > 1) { 
    const temp = arr[0];
    arr[0]=arr[heapSize-1];
    arr[heapSize-1] = temp;
    heapSize--;
    if (heapSize>1) {
      heapify(arr, heapSize, 0);
    }
  }
    return arr;
}
function buildHeap(arr) {
  const heapSize = arr.length;
  const firstHeapifyIndex = Math.floor(heapSize/2-1);
  for (let i=firstHeapifyIndex; i >= 0; i--) {
    heapify(arr, heapSize, i);
  }
}
function heapify(arr, heapSize, i) {
  const leftIndex = i * 2 + 1;
  const rightIndex = i * 2 + 2;
  let biggestValueIndex = i;
  if (leftIndex < heapSize && arr[leftIndex] > arr[biggestValueIndex]) {
    biggestValueIndex = leftIndex; 
  }
  if (rightIndex < heapSize && arr[rightIndex] > arr[biggestValueIndex]) {
    biggestValueIndex = rightIndex;
  }
  if (biggestValueIndex !== i) { 
    const temp = arr[i];
    arr[i] = arr[biggestValueIndex];
    arr[biggestValueIndex] = temp;
    heapify(arr, heapSize, biggestValueIndex);
  }
}

参考

相关阅读

JavaScript的排序算法——冒泡排序
JavaScript的排序算法——选择排序
JavaScript的排序算法——插入排序
JavaScript的排序算法——归并排序
JavaScript的排序算法——快速排序

相关文章

  • iOS算法总结-堆排序

    iOS算法总结-堆排序 iOS算法总结-堆排序

  • JavaScript实现经典排序算法

    使用JavaScript实现的经典排序算法 util 冒泡 简单选择 直接插入 快速排序 堆排序 归并排序

  • 堆排序

    转载:图解排序算法(三)之堆排序 预备知识 堆排序 堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选...

  • 排序算法-堆排序

    参考: Java排序算法(五):堆排序 【算法与数据结构】图说堆排序 【数据结构】排序算法:希尔、归并、快速、堆排...

  • 数据结构与算法

    常见排序算法 堆排序 算法大全 算法大汇总

  • JavaScript - 排序算法 - 堆排序

    特点: 时间复杂度:O(nlog2n) 堆排序是不稳定的排序算法 原理: 利用大顶堆排序(升序) 利用小顶堆排序(...

  • 数据结构

    Q:堆排序 A:1 堆排序算法(图解详细流程)2 堆排序 Q:排序算法时间复杂度与稳定性 选择排序为什么不稳定:举...

  • web开发需要知道的几个算法

    算法分类 快速排序算法 深度优先算法 广度优先算法 堆排序算法 归并排序算法

  • 2018-06-30

    排序算法之堆排序 堆排序是利用堆的数据结构而设计的一种排序算法,堆排序是一种选择排序。可以利用数组的特点快速定位制...

  • JavaScript的排序算法——堆排序

    堆排序(Heap Sort) 堆排序(Heap Sort)是一种基于比较的排序算法。堆排序可以被认为是一种改进版的...

网友评论

      本文标题:JavaScript的排序算法——堆排序

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