专业编程教程与实战项目分享平台

网站首页 > 技术文章 正文

前端30秒代码-堆排序 前端排序sort

ins518 2024-10-03 00:12:00 技术文章 15 ℃ 0 评论

使用堆排序算法对数字数组进行排序。

  • 使用递归。
  • 使用扩展运算符 (…) 克隆原始数组arr。
  • 使用闭包来声明一个变量l, 和一个函数heapify。
  • 使用for循环和Math.floor()结合heapify从数组创建最大堆。
  • 使用for循环反复缩小范围,heapify根据需要使用和交换值以对克隆数组进行排序。
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;
};

heapsort([2, 8, 2, 4, 1, 7, 1, 6, 3]); // [1, 1, 2, 2, 3, 4, 6, 7, 8]

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表