HeapSort 堆排序
堆的相关知识: 堆? 1.堆是一种完全二叉树 2.每个节点的值总是大于等于(大根堆)或者小于等于(小根堆)子节点的值. 完全二叉树? 除了最后一层外, 每一层都被完全填充, 且所有节点都向左对齐. 大根堆: 每个节点都大于等于子节点 小根堆: 每个节点都小于等于子节点 堆排序需要使用两个函数. 实现以下功能 1. 构建堆,以及实现堆内部对比以及调换. 2. 堆排序的调用, 以及堆大小的控制 # 堆排序_Python实现 # 堆最大化 def heapify(li, i, n): # 父节点位置n largest = i # 子节点位置,左,右 left = i * 2 + 1 right = i * 2 + 2 if left < n and li[left] > li[largest]: largest = left if right < n and li[right] > li[largest]: largest = right if largest != i: li[largest], li[i] = li[i], li[largest] # 显示变动 # print(li) # 当位置发生变动的时候, 递归调用, 重新排位 heapify(li, largest, n) # 因为是直接针对list列表内进行排序, 则不需要返回列表 # 堆排序 def heap_sort