python堆排序

参考:www.bilibili.com/video/BV1E4…

python实现

def heapSort(arr):
    # 最后一个非叶子节点
    lastIndex = len(arr) // 2 - 1
    for i in range(lastIndex, -1, -1):
        adjustHeap(arr, i, len(arr))

    # 交换最大的和末位
    for j in range(len(arr) - 1, 0, -1):
        arr[0], arr[j] = arr[j], arr[0]
        adjustHeap(arr, 0, j)


# {4,9,8,5,6}
def adjustHeap(arr, index, length):
    """
    :param arr: 列表
    :param index: 开始的索引
    :param length: 列表的长度
    :return:
    """
    temp = arr[index]
    k = 2 * index + 1
    while k < length:
        # 左右节点比较,选出较大
        if k + 1 < length and arr[k] < arr[k + 1]:
            k += 1
        if arr[k] > temp:
            arr[index] = arr[k]
            index = k
        else:
            break
        k = k * 2 + 1
    arr[index] = temp


l = [4, 9, 8, 5, 6, 11]
heapSort(l)
print(l)