Skip to content

‌堆排序(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>

不知道说啥了很无语了