程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> .NET網頁編程 >> C# >> C#入門知識 >> 數據結構示例——堆排序過程

數據結構示例——堆排序過程

編輯:C#入門知識

數據結構示例——堆排序過程


完整算法見[例程],本文用一個例子,演示堆排序的過程。

例:對{57, 40, 38, 11, 13, 34, 48, 75, 6, 19, 9, 7}進行堆排序的過程。

算法如下:

void HeapSort(RecType R[],int n)
{
    int i;
    RecType temp;
    //(1)循環建立初始堆
    for (i=n/2; i>=1; i--) 
        sift(R,i,n);
    //(2)進行n-1次循環,完成推排序
    for (i=n; i>=2; i--) 
    {
        temp=R[1];       //將第一個元素同當前區間內R[1]對換
        R[1]=R[i];
        R[i]=temp;
        sift(R,1,i-1);   //篩選R[1]結點,得到i-1個結點的堆
    }
}

(1)循環建立初始堆

    for (i=n/2; i>=1; i--) 
        sift(R,i,n);

用給出的序列構造堆的初始狀態如下:
這裡寫圖片描述
在此基礎上,根據上述代碼,從最後一個分支節點開始調整,目標是得到大根堆。過程如下圖:
這裡寫圖片描述
這個堆的存儲結構是:
這裡寫圖片描述

(2)進行n-1次循環,完成推排序

    for (i=n; i>=2; i--) 
    {
        temp=R[1];       //最大值交換到最後
        R[1]=R[i];
        R[i]=temp;
        sift(R,1,i-1);   //前面的無序區調整為堆
    }

過程圖示如下:
這裡寫圖片描述
請繼續補充畫完。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved