使用遞歸。
使用擴展運算符 (?...) 克隆原始數(shù)組 arr脚作。
使用閉包來聲明變量l和函數(shù)heapify寄摆。
使用for循環(huán)和Math.floor()結(jié)合使用heapify從數(shù)組創(chuàng)建最大堆數(shù)組设塔。
使用for循環(huán)重復(fù)縮小所考慮的范圍沧竟,根據(jù)需要使用heapify和交換值,以便對克隆的數(shù)組進行排序杈帐。
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;
};
更多內(nèi)容請訪問:https://www.icoderoad.com