堆排序(Heap Sort)
堆排序(Heap Sort)
堆排序(Heap Sort)是一种基于堆这种数据结构的比较排序算法,堆是一个近似完全二叉树的结构,并同时满足堆积的性质:即子节点的键值或索引总是小于(或大于)它的父节点。堆排序可以分为以下步骤:构建最大堆、交换堆顶与末尾元素、重新调整堆结构、重复直至排序完成。
示例
3
5
7
8
4
1
6
9
2
点我排序
vue
<script setup lang="ts">
import {reactive} from "vue";
const HeapSortList = reactive({
HeapSortList:[3,5,7,8,4,1,6,9,0]
})
const HeapSortClick= ()=>{
HeapSort(HeapSortList.HeapSortList)
}
function HeapSort(arr) {
let n = arr.length;
for (let i = Math.floor(n / 2) - 1; i >= 0; i--) {
heapify(arr, n, i);
}
for (let i = n - 1; i > 0; i--) {
[arr[0], arr[i]] = [arr[i], arr[0]];
heapify(arr, i, 0);
}
return arr;
}
function heapify(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) {
[arr[i], arr[largest]] = [arr[largest], arr[i]];
heapify(arr, n, largest);
}
}
</script>
<template>
<p>{{JSON.stringify(HeapSortList.HeapSortList)}}</p>
<h4 @click="HeapSortClick">点我排序</h4>
</template>
<style scoped lang="scss">
</style>