#include
#include
#include
#include
#include
using
namespace std;
//下沉調整
template
<
typename t>
void
downadjust
(vector
&vec,
int parentindex,
int size)
//如果父節點小於任何乙個孩子的值,則直接跳出
if(temp >= vec[childindex]
)break
; vec[parentindex]
= vec[childindex]
; parentindex = childindex;
childindex =
2* childindex +1;
} vec[parentindex]
= temp;
}//堆排序
template
<
typename t>
void
heapsort
(vector
&vec)
std::
copy
(vec.
begin()
, vec.
end(
), std::ostream_iterator
(std::cout,
" "));
cout << endl;
//迴圈刪除棧頂元素,移動集合尾部,調整堆產生新的堆頂
for(
int i = vec.
size()
-1; i >0;
--i )
}int
main
(int argc,
char
** ar**)
;heapsort
(vec)
; std::
copy
(vec.
begin()
, vec.
end(
), std::ostream_iterator<
int>
(std::cout,
" "));
cout << endl;
system
("pause");
return0;
}
演算法筆記 堆排序
堆排序是一種原地的,時間複雜度為 o nlogn 的排序演算法。快速排序的時間複雜度也是 o nlogn 甚至堆排序比快速排序的時間複雜度還要穩定,但是快速排序的效能要比堆排序好。什麼是堆 堆是乙個完全二叉樹。堆上任一節點的值都大於等於它的左右子樹的值,或者小於等於它的左右子樹的值。對於每個節點大於...
演算法筆記 堆排序1 0
郭郭自學筆記 1 堆排序1.0 1.堆是什麼 堆其實就是乙個完全二叉樹 特點 2.堆特性的應用 對於給的一組資料,如上圖 16,14,10,8,7,9,3,2,4,1 從大到小排序。如上圖,乙個大根堆,的根節點,明顯是一組資料的最大值。3.堆排序 c 下次我絕對不寫這麼多話了,直接上 include...
演算法筆記之堆排序
一 對堆排序的相關了解 1 堆排序的執行時間是 o nlogn 2 定義 堆heap是一棵具有下面屬性的二叉樹 1 它是一棵全然二叉樹。2 每乙個結點大於或等於它的隨意乙個孩子。備註 全然二叉樹的定義 除了最後一層沒填滿以及最後一層的葉子都是偏左放置的。其它層都是滿的二叉樹!3 二叉堆有兩種 最大堆...