資料結構 堆排序(c 實現)

2021-09-25 20:56:15 字數 746 閱讀 1529

一、堆排序的定義

堆排序是一種樹形選擇排序,在排序過程中可以把元素看成是一顆完全二叉樹,每個節點都大(小)於它的兩個子節點,當每個節點都大於等於它的兩個子節點時,就稱為大頂堆,也叫堆有序; 當每個節點都小於等於它的兩個子節點時,就稱為小頂堆。

二、堆排序演算法

1.將長度為n的待排序的陣列進行堆有序化構造成乙個大頂堆

2.將根節點與尾節點交換並輸出此時的尾節點

3.將剩餘的n -1個節點重新進行堆有序化 

4.重複步驟2,步驟3直至構造成乙個有序序列

三、c++**:

#include using namespace std;

void swap(int k, int i, int j)

//大頂堆的構造,傳入的i是父節點

void heapadjust(int k,int p,int n)

//當我們在for迴圈中找到了p子樹中,滿足條件的點,我們就加入資料到該點p,注意:p點原來資料已經被上移動了

//若沒有找到,就是相當於對其值不變

//插入

k[p] = temp;

}//大頂堆排序

資料結構 堆排序 堆排序 Heap Sort

堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...

資料結構 堆排序

include include void maxheapify int a,int length,int i void buildmaxheapify int a,int length void heapsort int a,int length void main void printf heap...

資料結構 堆排序

1 堆排序的時間複雜度與歸併排序相同,o nlogn 堆排序的優勢在與他只需要固定數量的額外空間,堆排序要比空間複雜性為o n 的歸併排序稍微慢一些,但是比空間複雜性為o 1 的歸併排序要快。2 對序列 26,5,77,1,61,11,59,15,48,19 進行堆排序 過程 調整最大堆 二叉堆 v...