- 使用递归。
- 使用扩展运算符 ( ...) 克隆原始数组 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