帮我写一个JS的堆排序
时间: 2023-03-14 12:59:58 浏览: 6
好的,以下是堆排序的 JavaScript 代码:
```
function heapSort(array) {
// 构建堆
for (let i = Math.floor(array.length / 2); i >= 0; i--) {
heapify(array, i, array.length);
}
// 排序
for (let i = array.length - 1; i > 0; i--) {
// 将堆顶元素与最后一个元素交换位置
[array[0], array[i]] = [array[i], array[0]];
// 重新堆化,确保剩余元素继续符合堆的性质
heapify(array, 0, i);
}
return array;
}
function heapify(array, index, heapSize) {
let largest = index;
let left = 2 * index + 1;
let right = 2 * index + 2;
if (left < heapSize && array[left] > array[largest]) {
largest = left;
}
if (right < heapSize && array[right] > array[largest]) {
largest = right;
}
if (largest !== index) {
[array[index], array[largest]] = [array[largest], array[index]];
heapify(array, largest, heapSize);
}
}
```
你可以这样使用这个函数:
```
let sortedArray = heapSort([5, 2, 9, 1, 4, 8, 6, 3, 7]);
console.log(sortedArray); // [1, 2, 3, 4, 5, 6, 7, 8, 9]
```
希望这能帮到你!