使用C 模版實現堆排序演算法

2021-06-01 11:15:30 字數 788 閱讀 8914

合併排序具有較好的執行時間複雜度o(nlogn),但卻需要額外的o(n)的空間;插入排序不需要開闢新的空間,但其時間開銷卻維持在o(n^2)。這兩種演算法各有所長,但都不盡如人意,綜合看來:不是用時間買空間,就是用空間換時間。有沒有這樣一種集眾家所長的演算法?既保持乙個較好的時間複雜度,又不必開闢額外的空間。堆排序無疑是不二選擇。

以下即是用模版實現的堆排序的演算法。

#includeusingnamespace std;

#define max_heap_size 100

//// 使用大頂堆進行堆排序

templatestruct maxheap

};templatevoid maxheapify(maxheap&maxheap,int k)

else

break; }}

templatemaxheapbuildheap(t* arr, int len)

memcpy(&heap.data[1], arr,sizeof(t)*len);

for (int i= len/2; i>0; --i)

return heap;

}templatevoid heapsort(t* arr,int len)

memcpy(arr, &heap.data[1],sizeof(t)*len);

}template void print(t* arr,int len)

{ for (int i=0; ivoid print(t* arr,int len)

{ for (int i=0; i

堆排序演算法(C 實現)

在軟體設計相關領域,堆 heap 的概念主要涉及到兩個方面 一種是資料結構,邏輯上是一顆完全二叉樹,儲存上是乙個陣列物件 二叉堆 另一種是垃圾收集儲存區,是軟體系統可以程式設計的記憶體區域。堆排序的時間複雜度是 堆排序 堆排序是一種選擇排序。是不穩定的排序方法。時間複雜度為o nlog2n 堆排序的...

堆排序演算法實現

include define true 1 define false 0 typedef struct recordtype void sift recordtype r,int k,int m 調整堆 r i t void crt heap recordtype r,int length 建立堆 ...

排序演算法 堆排序 C

堆排序的基本過程 1.找到最大的元素,放到最後面去 2.找到第二大的元素,放在倒數第二個位置 依次類推,直到所有元素完成排序。其中每一步中,找最大元素的方法是借助堆。堆可以看成是乙個完全二叉樹,且每個節點的值都大於它的子節點的值。對於陣列來說,就是任意第 i 個元素大於第 2i 1 和第 2i 2 ...