算法导论 - 基于 C# 的堆排序算法实现
堆排序(Heap Sort)是一种基于堆数据结构的比较排序算法。堆是一种特殊的完全二叉树,其中每个父节点的值都大于或等于(或小于或等于)其子节点的值。在堆排序算法中,我们使用的是大顶堆(每个父节点的值都大于或等于其子节点的值)。
算法描述
堆排序的核心思想是将数组构建成一个堆,然后反复地将堆的根(最大值)与未排序部分的最后一个元素交换,并对剩余未排序部分重新构建堆,直到所有元素都排序完毕。
步骤
- 将数组构建成一个大顶堆。
- 将堆的根(最大值)与未排序部分的最后一个元素交换。
- 将未排序部分重新构建成大顶堆。
- 重复步骤 2 和 3,直到所有元素均排序完毕。
代码实现
下面是堆排序的 C# 代码实现:
using System;
public class HeapSort
{
public static void Sort(int[] array)
{
int n = array.Length;
// 构建大顶堆
for (int i = n / 2 - 1; i >= 0; i--)
{
Heapify(array, n, i);
}
// 一个个将堆顶(最大值)移到数组末尾,并重新构建堆
for (int i = n - 1; i >= 0; i--)
{
// 将当前堆顶(最大值)移到末尾
Swap(array, 0, i);
// 对剩余部分重新构建堆
Heapify(array, i, 0);