白話數據結構之【大小堆】

一、定義

定義:簡言之,堆就是一棵完全二叉樹

完全二叉樹:整棵樹除了最底層的葉節點之外,是填滿的,而最底層的葉節點由左至右不得有空隙。
在這裏插入圖片描述

堆分類:小根堆(最小堆)、大根堆(最大堆)
在這裏插入圖片描述

二、堆排序

當父節點序號爲i(i>=0),則左節點爲2i+1,右節點爲2i+2
若將結點v的編號記作i(v),則滿足以下關係:
對於任意結點,則有:
1)若v有左孩子,則 i(leftChild(v)) = 2 * i(v) + 1;
2)若v有右孩子,則 i(rightChild(v))= 2 * i(v) + 2;
3)若v有父節點,則 i(parent(v)) = i(v)/2 - 1;

三、Java實現堆排序
四、參考文章

https://www.1024do.com/?p=3378
https://blog.csdn.net/u013384984/article/details/79496052
https://blog.csdn.net/MoreWindows/article/details/6709644

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章