1
1
class Solution :
2
2
# 调整为大顶堆
3
- def heapify (self , nums : [int ], index : int , end : int ):
3
+ def heapify (self , arr : [int ], index : int , end : int ):
4
+ # 根节点为 index,左节点为 2 * index + 1, 右节点为 2 * index + 2
4
5
left = index * 2 + 1
5
6
right = left + 1
6
7
while left <= end :
7
8
# 当前节点为非叶子结点
8
9
max_index = index
9
- if nums [left ] > nums [max_index ]:
10
+ if arr [left ] > arr [max_index ]:
10
11
max_index = left
11
- if right <= end and nums [right ] > nums [max_index ]:
12
+ if right <= end and arr [right ] > arr [max_index ]:
12
13
max_index = right
13
14
if index == max_index :
14
15
# 如果不用交换,则说明已经交换结束
15
16
break
16
- nums [index ], nums [max_index ] = nums [max_index ], nums [index ]
17
+ arr [index ], arr [max_index ] = arr [max_index ], arr [index ]
17
18
# 继续调整子树
18
19
index = max_index
19
20
left = index * 2 + 1
20
21
right = left + 1
21
22
22
23
# 初始化大顶堆
23
- def buildMaxHeap (self , nums : [int ]):
24
- size = len (nums )
24
+ def buildMaxHeap (self , arr : [int ]):
25
+ size = len (arr )
25
26
# (size - 2) // 2 是最后一个非叶节点,叶节点不用调整
26
27
for i in range ((size - 2 ) // 2 , - 1 , - 1 ):
27
- self .heapify (nums , i , size - 1 )
28
- return nums
28
+ self .heapify (arr , i , size - 1 )
29
+ return arr
29
30
30
31
# 升序堆排序,思路如下:
31
32
# 1. 先建立大顶堆
32
33
# 2. 让堆顶最大元素与最后一个交换,然后调整第一个元素到倒数第二个元素,这一步获取最大值
33
34
# 3. 再交换堆顶元素与倒数第二个元素,然后调整第一个元素到倒数第三个元素,这一步获取第二大值
34
35
# 4. 以此类推,直到最后一个元素交换之后完毕。
35
- def maxHeapSort (self , nums : [int ]):
36
- self .buildMaxHeap (nums )
37
- size = len (nums )
36
+ def maxHeapSort (self , arr : [int ]):
37
+ self .buildMaxHeap (arr )
38
+ size = len (arr )
38
39
for i in range (size ):
39
- nums [0 ], nums [size - i - 1 ] = nums [size - i - 1 ], nums [0 ]
40
- self .heapify (nums , 0 , size - i - 2 )
41
- return nums
40
+ arr [0 ], arr [size - i - 1 ] = arr [size - i - 1 ], arr [0 ]
41
+ self .heapify (arr , 0 , size - i - 2 )
42
+ return arr
42
43
43
- def sortnumsay (self , nums : List [int ]) -> List [int ]:
44
+ def sortArray (self , nums : List [int ]) -> List [int ]:
44
45
return self .maxHeapSort (nums )
0 commit comments