def tune_heap(arr
, heapsize
, root
):
left
= 2 * root
+ 1
right
= left
+ 1
larger
= root
if left
< heapsize
and arr
[larger
] < arr
[left
]:
larger
= left
if right
< heapsize
and arr
[larger
] < arr
[right
]:
larger
= right
arr
[root
], arr
[larger
] = arr
[larger
], arr
[root
]
if larger
!= root
:
tune_heap
(arr
, heapsize
, larger
)
def build_max_heap(arr
):
for i
in range((len(arr
) - 2) // 2, -1, -1):
tune_heap
(arr
, len(arr
), i
)
def heap_sort(arr
):
if len(arr
) <= 1:
return arr
build_max_heap
(arr
)
arr
[0], arr
[-1] = arr
[-1], arr
[0]
for i
in range(len(arr
) - 2):
tune_heap
(arr
, len(arr
) - 1 - i
, 0)
arr
[0], arr
[len(arr
) - 2 - i
] = arr
[len(arr
) - 2 - i
], arr
[0]
return arr
arr
= [2, 1, 3, 4, 5, 10, 3, 2, 9]
for i
in range(len(arr
) + 1):
sorted_arr
= heap_sort
(arr
[:i
])
print(sorted_arr
)
利用堆
转载请注明原文地址:https://ipadbbs.8miu.com/read-58660.html