首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Visual C# 常用排序演算法(六):堆積排序完整實作與總結

     編輯:關於C語言

堆積排序完整程式碼

/// 小根堆排序
private static void HeapSort(ref double[] array)
{
    for (int i = array.Length - 1; i >= 0; i--)
    {
        if (2 * i + 1 < array.Length)
        {
            int minChild = 2 * i + 1;
            // 比較左右子節點,取較小者
            if (2 * i + 2 < array.Length && array[2 * i + 1] > array[2 * i + 2])
                minChild = 2 * i + 2;
            
            if (array[i] > array[minChild])
            {
                ExchangeValue(ref array[i], ref array[minChild]);
                NodeSort(ref array, minChild);
            }
        }
    }
}

/// 節點下沉調整
private static void NodeSort(ref double[] array, int startIndex)
{
    while (2 * startIndex + 1 < array.Length)
    {
        int minChild = 2 * startIndex + 1;
        if (2 * startIndex + 2 < array.Length && 
            array[2 * startIndex + 1] > array[2 * startIndex + 2])
            minChild = 2 * startIndex + 2;
        
        if (array[startIndex] > array[minChild])
        {
            ExchangeValue(ref array[startIndex], ref array[minChild]);
            startIndex = minChild;
        }
        else break;
    }
}

private static void ExchangeValue(ref double a, ref double b)
{
    double temp = a; a = b; b = temp;
}

演算法複雜度

指標複雜度
時間 (最好/平均/最差)O(n log n)
空間O(1) 原地排序
穩定性不穩定

系列總結

「演算法是程式的靈魂」。雖 C#/Java 提供豐富內建排序 (Array.Sort、List.Sort、LINQ OrderBy),理解底層演算法原理對於:

  • 效能調優與複雜度分析
  • 自訂比較器 (IComparer) 正確實作
  • 面試與電腦科學基礎鞏固
  • 特殊場景 (外部排序、平行排序) 選型

皆至關重要。建議定期複習經典演算法,避免「靈魂出竅」。

附件說明

完整控制台程式碼包含本系列 6 種排序實作,可下載參考。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved