diff --git a/Contents/01.Array/02.Array-Sort/07.Array-Heap-Sort.md b/Contents/01.Array/02.Array-Sort/07.Array-Heap-Sort.md index 6f69dc6d..4cde705e 100644 --- a/Contents/01.Array/02.Array-Sort/07.Array-Heap-Sort.md +++ b/Contents/01.Array/02.Array-Sort/07.Array-Heap-Sort.md @@ -26,7 +26,7 @@ class MaxHeap: self.max_heap = [] ``` - + ### 1.3 访问堆顶元素 @@ -61,6 +61,38 @@ class MaxHeap: 这个过程称为「上移调整(Shift Up)」。因为新插入的元素会逐步向堆的上方移动,直到找到了合适的位置,保持堆的有序性。 +::: tabs#heapPush + +@tab <1> + + + +@tab <2> + + + +@tab <3> + + + +@tab <4> + + + +@tab <5> + + + +@tab <6> + + + +@tab <7> + + + +::: + ```python class MaxHeap: ...... @@ -78,7 +110,7 @@ class MaxHeap: i = (i - 1) // 2 ``` -在最坏情况下,向堆中插入元素的时间复杂度为 $O(\log n),ドル其中 $n$ 是堆中元素的数量,这是因为堆的高度是 $\log n$。 +在最坏情况下,「向堆中插入元素」的时间复杂度为 $O(\log n),ドル其中 $n$ 是堆中元素的数量,这是因为堆的高度是 $\log n$。 ### 1.5 删除堆顶元素 @@ -95,6 +127,38 @@ class MaxHeap: 这个过程称为「下移调整(Shift Down)」。因为新的堆顶元素会逐步向堆的下方移动,直到找到了合适的位置,保持堆的有序性。 +::: tabs#heapPop + +@tab <1> + + + +@tab <2> + + + +@tab <3> + + + +@tab <4> + + + +@tab <5> + + + +@tab <6> + + + +@tab <7> + + + +::: + ```python class MaxHeap: ...... @@ -143,7 +207,7 @@ class MaxHeap: break ``` -删除堆顶元素的时间复杂度通常为$O(\log n),ドル其中 $n$ 是堆中元素的数量,因为堆的高度是 $\log n$。 +「删除堆顶元素」的时间复杂度通常为$O(\log n),ドル其中 $n$ 是堆中元素的数量,因为堆的高度是 $\log n$。 ## 2. 堆排序 @@ -166,6 +230,89 @@ class MaxHeap: 3. **重复交换和调整堆**: 1. 重复第 2ドル$ 步,直到堆的大小为 1ドル$ 时,此时大顶堆的数组已经完全有序。 +::: tabs#heapSortBuildMaxHeap + +@tab <1> + + + +@tab <2> + + + +@tab <3> + + + +@tab <4> + + + +@tab <5> + + + +@tab <6> + + + +@tab <7> + + + +::: + +::: tabs#heapSortExchangeVal + +@tab <1> + + + +@tab <2> + + + +@tab <3> + + + +@tab <4> + + + +@tab <5> + + + +@tab <6> + + + +@tab <7> + + + +@tab <8> + + + +@tab <9> + + + +@tab <10> + + + +@tab <11> + + + +@tab <12> + + + +::: ### 2.3 堆排序代码实现