本週的內容又是一次延續上一週學習內容掌握新知識的過程,本週學習了一種特殊形式的樹——堆,學習了兩種實現堆的方法:用鏈表實現和用數組實現,同時還學習了使用堆來實現一種特殊隊列——優先隊列以及基於堆實現的另外一種排序方法:堆排序。html
6
,它和它的右孩子9
與堆的附加屬性二衝突,因此將二者進行交換。4
,它比它的兩個孩子都小,因此與其中較大的9
進行交換,而在交換以後,4
與它新的左孩子5
和右孩子6
進行對比,仍然與堆的附加屬性二衝突,因此再次對4
和6
進行交換操做。lastNode
來存儲最末結點。addElement
lastNode
指針再次指向最末的結點,該步的時間複雜度爲O(1)。getNextParentAdd
(用於返回插入結點如今的父結點)和heapifyAdd
(從該結點開始,對剩餘堆進行從新調整直至根處)。removeMin
getNewLastNode
(用於返回最末結點的引用)和heapifyRemove
(從根結點開始,對下面的堆進行從新調整直至葉子結點)。addElement
heapifyAdd
(在必要時,從該結點開始,對剩餘堆進行從新調整直至根處)。removeMin
heapifyRemove
(在必要時,對下面的堆進行從新調整直至葉子結點)。addElement
方法)的時間複雜度爲O(logn),所以n個結點的時間複雜度爲O(nlogn)。在刪除操做中,每個元素的刪除操做(即便用removeMin
方法)的時間複雜度也爲O(logn),所以刪除n個結點的時間複雜度爲O(nlogn)。因此堆排序的時間複雜度爲O(nlogn)。9
與最末結點4
進行交換,而後將9
輸出;對於剩下的部分,重新的根結點開始,4
比它的左右孩子都小,所以與兩者之間較大的8
進行交換,交換後4
變爲葉子結點,開始進行下一步操做。ArrayHeap
類,爲了查看堆的構造而改爲了LinkedHeap
類,可是從樹的結構來看就算使用層序遍歷它也依舊不是按照元素進入隊列的順序排列的。代碼行數(新增/累積) | 博客量(新增/累積) | 學習時間(新增/累積) | 重要成長 | |
---|---|---|---|---|
目標 | 5000行 | 30篇 | 400小時 | |
第一週 | 10/10 | 1/1 | 10/10 | |
第二週 | 246/366 | 2/3 | 20/30 | |
第三週 | 567/903 | 1/4 | 10/40 | |
第四周 | 2346/3294 | 2/6 | 20/60 | |
第五週 | 2346/3294 | 2/8 | 30/90 | |
第六週 | 1343/4637 | 2/8 | 20/110 | |
第七週 | 654/5291 | 1/9 | 25/135 | |
第八週 | 2967/8258 | 1/10 | 15/150 |