写出堆排序的步骤(最大堆说明)
时间: 2023-11-03 08:04:45 浏览: 60
堆排序是一种基于二叉堆数据结构的排序算法。下面是最大堆排序的步骤:
1. 将待排序的数组构建成一个最大堆。最大堆满足父节点的值大于等于子节点的值。
2. 从最大堆中取出根节点(即堆顶元素,最大值),将其与最后一个元素交换位置。此时,最大值已经在数组的末尾。
3. 修复交换后的堆,将剩余的元素重新构建成最大堆。
4. 重复步骤2和3,直到堆中只剩下一个元素或者没有元素。
5. 数组中的元素就以升序排列。
这里是一个简单的实现伪代码:
```
// 建立最大堆
function buildMaxHeap(arr, n, i) {
let largest = i;
let left = 2*i + 1;
let right = 2*i + 2;
if (left < n && arr[left] > arr[largest]) {
largest = left;
}
if (right < n && arr[right] > arr[largest]) {
largest = right;
}
if (largest !== i) {
swap(arr, i, largest);
buildMaxHeap(arr, n, largest);
}
}
// 交换数组元素
function swap(arr, i, j) {
let temp = arr[i];
arr[i] = arr[j];
arr[j] = temp;
}
// 堆排序
function heapSort(arr) {
let n = arr.length;
// 构建最大堆
for (let i = Math.floor(n/2) - 1; i >= 0; i--) {
buildMaxHeap(arr, n, i);
}
// 依次取出堆顶元素并修复堆
for (let i = n-1; i >= 0; i--) {
swap(arr, 0, i);
buildMaxHeap(arr, i, 0);
}
}
// 示例
let arr = [4, 10, 3, 5, 1];
heapSort(arr);
console.log(arr); // [1, 3, 4, 5, 10]
```
以上是堆排序的步骤及简单实现代码,希望可以帮到你!