C#算法之堆排序算法

算法释义:堆排序算法的基本原理,其实就是利用二叉堆的数据结构,通过构建一个最大堆,然后将堆顶元素(最大值)与末尾元素交换,接着缩小堆的大小并重新调整堆,直到堆中只剩下一个元素。

C#实现堆排序大致包括以下两个步骤:

1、构建最大堆。从最后一个非叶子节点开始,向上逐个节点进行下沉操作,直到堆顶。

2、执行排序。将堆顶元素与堆的最后一个元素交换,然后缩小堆的范围,重新调整堆,直到堆中只剩下一个元素。

简单的示例代码如下:

cs 复制代码
class Program
{
    static void Main()
    {
        int[] arr = { 12, 11, 13, 5, 6, 7 };
        int n = arr.Length;

        HeapSort(arr, n);

        // 打印排序后的数组
        Console.WriteLine("Sorted array: ");
        foreach (int item in arr)
        {
            Console.Write(item + " ");
        }
    }

    // 堆排序函数
    static void HeapSort(int[] arr, int n)
    {
        // 构建最大堆
        for (int i = n / 2 - 1; i >= 0; i--)
            Heapify(arr, n, i);

        // 执行排序
        for (int i = n - 1; i > 0; i--)
        {
            // 交换堆顶元素和当前堆的最后一个元素
            int temp = arr[0];
            arr[0] = arr[i];
            arr[i] = temp;

            // 重新调整堆
            Heapify(arr, i, 0);
        }
    }

    // 调整堆以确保堆的性质
    static void Heapify(int[] arr, int n, int i)
    {
        int largest = i; // 假设当前节点是最大值节点
        int left = 2 * i + 1; // 左子节点
        int 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)
        {
            // 交换当前节点和最大值节点
            int temp = arr[i];
            arr[i] = arr[largest];
            arr[largest] = temp;

            // 继续下沉
            Heapify(arr, n, largest);
        }
    }
}
相关推荐
仰泳之鹅1 天前
【C语言】自定义数据类型2——联合体与枚举
c语言·开发语言·算法
x_yeyue1 天前
三角形数
笔记·算法·数论·组合数学
Xin_ye100861 天前
C# 零基础到精通教程 - 第七章:面向对象编程(入门)——类与对象
开发语言·c#
rockey6271 天前
AScript异步执行与await关键字
c#·.net·script·eval·expression·异步执行·动态脚本
Mr. zhihao1 天前
深入解析redis基本数据结构
数据结构·数据库·redis
念何架构之路1 天前
Go语言加密算法
数据结构·算法·哈希算法
AI科技星1 天前
《数学公理体系·第三部·数术几何》(2026 年版)
c语言·开发语言·线性代数·算法·矩阵·量子计算·agi
失去的青春---夕阳下的奔跑1 天前
560. 和为 K 的子数组
数据结构·算法·leetcode
黎阳之光1 天前
黎阳之光:以视频孪生重构智慧医院信息化,打造高标项目核心竞争力
大数据·人工智能·物联网·算法·数字孪生
丷丩1 天前
三级缓存下MVT地图瓦片服务性能优化策略
算法·缓存·性能优化·gis·geoai-up