C 實現堆排序示例

2022-09-24 17:15:18 字數 1915 閱讀 7265

目錄

#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 排序演算法 在任何時候,陣列中只有常數個元素儲存在陣列外。堆的資料結構不至少在堆排序中有用,還可以構成乙個有效的優先佇列。二叉堆資料結構是一種陣列物件,它可以被看做是一棵完全二叉樹。樹中的每個節點與陣列中存放該節點值的那個元素對應。除了最後...