堆排序是一種具有合併排序和插入排序共同優點的排序方法。它的時間複雜度為o(nlgn),它也是一種原地排序演算法:在任何時候,陣列中只有常數個元素儲存在輸入陣列以外。要介紹堆排序首先要介紹什麼是堆。
1.建堆:堆資料結構是一種陣列物件,它可以被視為一顆完全二叉樹,如下圖。右邊陣列表示的堆可以用左邊的完全二叉樹來表示,其中若父節點對應陣列下標為i,則其左孩子對應陣列下標為2*i,右孩子為2*i+1。
具體**如下:
可以看到圖中節點值為4的節點的保持根堆性質過程。**如下:
void max_heapify(int a,int i,int heapsize)
}以下是swap函式:
void swap(int& first , int& second)
3.堆排序演算法:我用乙個圖來直觀表示吧!
過程大致是將大根堆的根節點與最後乙個葉子節點交換,然後縮小陣列範圍(即將heapsize減小),將最大值排除掉,最後對新的根節點進行「保持堆性質方法」,依次類推,**如下:
c 實現堆排序
include include include using namespace std 對比枝節點和左右子節點,將比較大的節點放置於枝節點 template int heapadjust t t,int i,int size if rightchild size t rightchild t max...
堆排序(C 實現)
堆排序執行時間 n lgn 它是一種原地 in place 排序演算法 在任何時候,陣列中只有常數個元素儲存在陣列外。堆的資料結構不至少在堆排序中有用,還可以構成乙個有效的優先佇列。二叉堆資料結構是一種陣列物件,它可以被看做是一棵完全二叉樹。樹中的每個節點與陣列中存放該節點值的那個元素對應。除了最後...
C 實現堆排序
c 實現的堆排序,分為三個函式實現 堆調整函式 保持最大 最小堆 堆構建函式 利用堆調整函式建立乙個最大 最小堆 堆排序函式 每次取堆頂元素交換至陣列最後,並將size減一,然後調整堆頂保持最大 最小堆 堆調整函式 調整堆為陣列a,需要調整的結點序號為i,堆大小為size void heapadju...