目錄
#include
#include
#include
typedef int hpdatatype;
typedef struct heap
heap;
//堆的向下調整演算法
void adjustdown(hpdatatype* a, int n, int root);
//堆的向上調整演算法
void adjustup(hpdatatype* a, int child);
//堆的初始化
void heapinit(heap* php, hpdatatype* a,int n);
//堆的銷毀
void heapdestroy(heap* php);
//堆的插入
void heappush(heap* php, hpdatatype x);
//堆的刪除
void heappop(heap* php);
//堆裡的資料個數
int heapsize(heap* php);
//判斷堆是否為空
int heapempty(heap* php);
//取堆頂資料
hpdatatype heaptop(heap* php);
• 堆的插入:將x插入下標為size的位置,++size然後使用向上調整演算法調整
• 堆的刪除(刪棧頂資料):將棧頂資料和下標為size-1位置的資料交換,然後–size,使用向下調整演算法調整
#include "heap.h"
//堆向下調整演算法
//建小堆
void www.cppcns.comadjustdown(hpdatatype* a, int n, int root)
//中途child>parent則已滿足小堆,直接break
else
}}//堆的向上調整演算法
//建小堆
void adjustup(hpdatatype* a, int child)
else
}}//堆的初始化
void heapinit(heap* php, hpdatatype* a, int n)
for (int i = 0; i < n; i++)
//建堆
for (int i = (n - 2) / 2; i >= 0; --i)
php->capacity = n;
php->size = n;
}//堆的銷毀
void heapdestroy(heap* php)
//堆的插入
void heappush(heap* php, hpdatatype x)
php->a = tem;
php->capacity *= 2;
} php->a[php->size] = x;
++php->size;
adjustup(php->a,php->size - 1);
}//堆的刪除
void heappop(heap* php)
//堆裡的資料個數
int heapsize(heap* php)
//判斷堆是否為空
//為空返回1,不為空返回0
int heapempty(heap* php)
//取堆頂資料
hpdatatype heaptop(heap* php)
#include "heap.h"
void testheap()
; heap hp;
heapinit(&hp, arr, sizeof(arr)/sizeof(int));
while (!heapempty(&hp))
printf("\n");
heapdestroy(&hp);
}int main()
c 實現堆排序
include include include using namespace std 對比枝節點和左右子節點,將比較大的節點放置於枝節點 template int heapadjust t t,int i,int size if rightchild size t rightchild t max...
C 實現堆排序
堆排序是一種具有合併排序和插入排序共同優點的排序方法。它的時間複雜度為o nlgn 它也是一種原地排序演算法 在任何時候,陣列中只有常數個元素儲存在輸入陣列以外。要介紹堆排序首先要介紹什麼是堆。1.建堆 堆資料結構是一種陣列物件,它可以被視為一顆完全二叉樹,如下圖。右邊陣列表示的堆可以用左邊的完全二...
堆排序(C 實現)
堆排序執行時間 n lgn 它是一種原地 in place 排序演算法 在任何時候,陣列中只有常數個元素儲存在陣列外。堆的資料結構不至少在堆排序中有用,還可以構成乙個有效的優先佇列。二叉堆資料結構是一種陣列物件,它可以被看做是一棵完全二叉樹。樹中的每個節點與陣列中存放該節點值的那個元素對應。除了最後...