碎片时间学编程「51]:使用堆排序算法对数字数组进行排序

使用递归。

使用扩展运算符 ( ...) 克隆原始数组 arr。

使用闭包来声明变量l和函数heapify。

使用for循环和Math.floor()结合使用heapify从数组创建最大堆数组。

使用for循环重复缩小所考虑的范围,根据需要使用heapify和交换值,以便对克隆的数组进行排序。

JavaScript

const heapsort = arr => {

  const a = [...arr];

  let l = a.length;

  const heapify = (a, i) => {

    const left = 2 * i + 1;

    const right = 2 * i + 2;

    let max = i;

    if (left < l && a[left] > a[max]) max = left;

    if (right < l && a[right] > a[max]) max = right;

    if (max !== i) {

      [a[max], a[i]] = [a[i], a[max]];

      heapify(a, max);

    }

  };

  for (let i = Math.floor(l / 2); i >= 0; i -= 1) heapify(a, i);

  for (i = a.length - 1; i > 0; i--) {

    [a[0], a[i]] = [a[i], a[0]];

    l--;

    heapify(a, 0);

  }

  return a;

};

更多内容请访问:https://www.icoderoad.com

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容