經典演算法 堆排序

2021-08-07 05:02:22 字數 1040 閱讀 9959

堆排序是利用堆的性質來進行排序的乙個演算法。

一、堆堆(英語:heap)是電腦科學中一類特殊的資料結構的統稱。堆通常是乙個可以被看做一棵樹的陣列物件。堆總是滿足下列性質:

將根節點最大的堆叫做最大堆或大根堆,根節點最小的堆叫做最小堆或小根堆。常見的堆有二叉堆、斐波那契堆等。

堆的定義如下:n個元素的序列當且僅當滿足下關係時,稱之為堆。

(k i

<= k

2i,k

i<= k

2i+1)或者(k

i >= k

2i,k

i >= k

2i+1), (i = 1,2,3,4...n/2)

若將和此次序列對應的一維陣列(即以一維陣列作此序列的儲存結構)看成是乙個完全二叉樹,則堆的含義表明,完全二叉樹中所有非終端結點的值均不大於(或不小於)其左、右孩子結點的值。由此,若序列是堆,則堆頂元素(或完全二叉樹的根)必為序列中n個元素的最小值(或最大值)。

二、堆排序的思想

通過從父節點向子節點不斷的下探進行比較,將較大/較小的數保留在父節點,最終第一趟排序結束後陣列中最小或最大的數必定在堆頂,將堆頂與最後一位數進行交換,令陣列長度減少1,即不考慮這個已經排序完成的數字,對剩餘的資料再次進行第二趟排序,直至全體有序為止。

三、**實現

#include 

//降序

void heapadjust (int *arr,int i,int len)

if (arr[j - 1] > arr[i - 1])

else

}}void heapsort (int *arr,int len)

for (int j = len; j > 0; j--) }

int main ()

; int len = (sizeof(arr)/sizeof(arr[0]))-1; //有效長度

heapsort(arr,len);

return 0;

}

未編寫列印函式,僅通過除錯檢視了陣列的值,成功完成了降序排序。

經典排序演算法 堆排序Heap sort

經典排序演算法 堆排序heap sort 堆排序有點小複雜,分成三塊 第一塊,什麼是堆,什麼是最大堆 第二塊,怎麼將堆調整為最大堆,這部分是重點 第三塊,堆排序介紹 第一塊,什麼是堆,什麼是最大堆 什麼是堆 這裡的堆 二叉堆 指得不是堆疊的那個堆,而是一種資料結構。堆可以視為一棵完全的二叉樹,完全二...

經典排序演算法 堆排序(Heap Sort)

首先堆是乙個完全二叉樹,但同時他具有這樣的要求 每乙個結點的值都大於或等於其左右孩子結點的值,稱為大頂堆 每乙個結點的值都小於或等於其左右孩子結點的值,稱為小頂堆。如下圖是乙個大頂堆 在此要補充乙個二叉樹的性質 二叉樹的某個節點下標為i,則它的左孩子的下標一定為2i,右孩子下標一定為2i 1。假如現...

經典排序演算法 堆排序Heap sort

經典排序演算法 堆排序heap sort 堆排序有點小複雜,分成三塊 第一塊,什麼是堆,什麼是最大堆 第二塊,怎麼將堆調整為最大堆,這部分是重點 第三塊,堆排序介紹 第一塊,什麼是堆,什麼是最大堆 什麼是堆 這裡的堆 二叉堆 指得不是堆疊的那個堆,而是一種資料結構。堆可以視為一棵完全的二叉樹,完全二...