演算法 之 堆 小結

2021-08-31 06:30:19 字數 2004 閱讀 6624

之前我們討論的堆,都把最大鍵值儲存在根節點中,這種型別的堆可以看作是最大堆。

我們還可以建立另一種堆,把最鍵小值儲存在根節點中,根節點以外的節點的鍵值,大於或等於儲存在它父節點中的鍵值,這種型別的堆可以看作是最小堆。

具體是用最大堆還是最小堆,就根據我們自身的需要來選擇了。

堆的演算法到這裡就講完了,下面這段**包括了之前講過的堆的所有演算法:

#include #include void siftup(int* heap, int index);

void siftdown(int* heap, int index);

void siftdown(int* heap, int siftdownto, int index);

int* insertelement(int* heap, int element);

int* deleteelement(int* heap, int index);

int* makeheap(int* array, int arraylength);

void heapsort(int* heap);

void print(char* description, int* heap);

void siftup(int* heap, int index)

else

index /= 2; }}

void siftdown(int* heap, int index)

void siftdown(int* heap, int siftdownto, int index)

else

}}int* insertelement(int* heap, int element)

resultheap[resultheaplength] = element;

siftup(resultheap, resultheaplength);

return resultheap;

}int* deleteelement(int* heap, int index)

if (index == resultheaplength)

return resultheap;

resultheap[index] = y;

if (y > x)

else

return resultheap;

}int* makeheap(int* array, int arraylength)

for (int i = heaplength / 2; i >= 1; i--)

return heap;

}void heapsort(int* heap)

}void print(char* description, int* heap)

printf("\n");

}void main()

; int* heap = makeheap(array, array_length);

print("從陣列初始化堆", heap);

int* heapafterinsert = insertelement(heap, 20);

print("插入新資料20", heapafterinsert);

free(heap);

int* heapafterdelete = deleteelement(heapafterinsert, 2);

print("刪除第2個資料", heapafterdelete);

free(heapafterinsert);

heapsort(heapafterdelete);

print("按非降序排序", heapafterdelete);

free(heapafterdelete);

getchar();

}

演算法 之 堆 - 簡介

演算法 之 堆 - sift-up和sift-down

演算法 之 堆 - 插入和刪除

演算法 之 堆 - 建立堆

演算法 之 堆 - 排序

演算法 之 堆 建立堆

給出乙個有n個元素的陣列a 1.n 要建立乙個包含這些元素的堆,可以這樣進行 從空的堆開始,不斷插入每乙個元素,直到a完全被轉移到堆中為止。因為插入第j個鍵值用時o log j 因此用這種方法建立堆疊的時間複雜性是o n log n 我們知道對應於堆h 1.n 的樹的節點可以方便地以自頂向下 從左到...

演算法模板之堆 優先佇列

堆的定義 堆結構是一種陣列物件,可以被視為一顆完全二叉樹。樹中的每個節點與陣列中存放該節點中值的那個元素相對應。由上圖不難看出 fa ther i i 2 le ftch ild i i 2 r ight chil d i i 2 1當然也可以用位運算來加快速度 fa ther i i 1 left...

堆基礎知識小結

1 chunk 結構 未分配的chunk prev size size p 0 fd bk unused 已分配chunk prev size size p 1 header malloc返回的位址是這裡,注意與未分配的chunk比較,此處應該是fd的起始位置 data 相鄰的chunk prev ...