class HeapSort:
# 堆排序
def heap_sort(self, nums):
# 先创建大根堆
self.build_max_heap(nums)
for i in range(len(nums)-1, -1, -1):
nums[0], nums[i] = nums[i], nums[0]
self.heapify(nums, 0, i)
# 创建大根堆
def build_max_heap(self, nums):
len_ = len(nums)
# 将每个子树先处理成大根堆
for i in range((len_-1)//2, -1, -1):
self.heapify(nums, i, len_)
# arr为输入的列表,i为根节点,length为列表的长度
def heapify(self, arr, i, length):
# 计算根节点的左右孩子
left = 2 * i + 1
right = 2 * i + 2
largest = i
# 左孩子
if left < length and arr[left] > arr[i]:
largest = left
# 右孩子
if right < length and arr[right] > arr[i]:
largest = right
# 调整位置
if largest != i:
arr[i], arr[largest] = arr[largest], arr[i]
# 处理子树
self.heapify(arr, i, length)
if __name__ == "__main__":
# 如果是一个一个的数字怎么处理?
# 那就先创建一个list, 用list.append,生成nums,然后生成大根堆
nums = [1, 2, 3, 4, 5, 6, 7]
h = HeapSort()
h.heap_sort(nums)
print(nums)
必备知识点--1.堆排序
堆排序算法实现与应用
于 2022-03-18 17:18:19 首次发布
8万+

被折叠的 条评论
为什么被折叠?



