帮我写一个js的堆排序
时间: 2023-07-01 20:18:18 浏览: 57
当然可以,下面是一个简单的 JavaScript 堆排序实现:
```javascript
function heapSort(arr) {
// 将数组转换为最大堆
for (let i = Math.floor(arr.length / 2) - 1; i >= 0; i--) {
heapify(arr, i, arr.length);
}
// 依次取出最大值并重新调整堆
for (let i = arr.length - 1; i >= 0; i--) {
[arr[0], arr[i]] = [arr[i], arr[0]];
heapify(arr, 0, i);
}
}
function heapify(arr, root, length) {
let largest = root;
let left = root * 2 + 1;
let right = root * 2 + 2;
if (left < length && arr[left] > arr[largest]) {
largest = left;
}
if (right < length && arr[right] > arr[largest]) {
largest = right;
}
if (largest !== root) {
[arr[root], arr[largest]] = [arr[largest], arr[root]];
heapify(arr, largest, length);
}
}
```
使用示例:
```javascript
const arr = [5, 2, 7, 3, 6, 1, 4];
heapSort(arr);
console.log(arr); // [1, 2, 3, 4, 5, 6, 7]
```