#includeinth[15] = ;
//堆陣列
,h[0]
不在計算範圍內
,不是堆裡的元素
,請忽略
intn = 14
;
//堆元素個數
//交換兩個數
voidswap(int*x,
int*y)
//向下調整下標為
i的節點
voidsiftdown(inti)
//否則該節點已滿足最小堆要求
,跳出迴圈
elsebreak;}}
//每次生成最小堆後最小的數肯定就在根節點
,返回根節點的數
intdeletemin()
//生成最小堆
voidcreatheap()
}voidmain()
printf("
\ncreate the minheap:
\n");
creatheap();
for(inti = 1
; i <= n ; ++i)
//依次輸出根節點
printf("
\nsort after:
\n");
for(inti = 1
; i <= 14
; ++i)
}
演算法 3 堆排序
堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...
演算法 3 堆排序
堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...
演算法 3 堆排序
堆排序是一種選擇排序,其時間複雜度為o nlogn 堆的定義 n個元素的序列當且僅當滿足下列關係之一時,稱之為堆。情形1 ki k2i 且ki k2i 1 最小化堆或小頂堆 情形2 ki k2i 且ki k2i 1 最大化堆或大頂堆 其中i 1,2,n 2向下取整 若將和此序列對應的一維陣列 即以一...