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);
        }
    }
}
相关推荐
月明长歌2 分钟前
【码道初阶】Leetcode面试题02.04:分割链表[中等难度]
java·数据结构·算法·leetcode·链表
如竟没有火炬4 分钟前
快乐数——哈希表
数据结构·python·算法·leetcode·散列表
蒙奇D索大5 分钟前
【数据结构】考研408 | B树探秘:从查找操作到树高性能分析
数据结构·笔记·b树·考研·改行学it
TL滕6 分钟前
从0开始学算法——第十四天(数组与搜索练习)
笔记·学习·算法
SoleMotive.9 分钟前
bio、nio、aio的区别以及使用场景
python·算法·nio
c#上位机16 分钟前
halcon求图像灰度最大值和最小值——min_max_gray
图像处理·人工智能·计算机视觉·c#·上位机·halcon
一招定胜负17 分钟前
机器学习算法二:逻辑回归
算法·机器学习·逻辑回归
星诺算法备案17 分钟前
算法备案材料:明晰材料逻辑,构建安全合规的算法体系
人工智能·算法·推荐算法·备案
another heaven20 分钟前
【软考 cache映射】主存容量
算法
ULTRA??22 分钟前
判断水仙花数并输出,c++
c++·算法