zoukankan      html  css  js  c++  java
  • 堆排序

    def find_max(arr, size):
        # 从后往前遍历
        # 父节点为i 子结点为2i+1 和 2i+2
        for i in range(size-1, 0, -1):
            # 记录父节点
            parent = i//2
            # 记录子节点
            child = i
            # 比较子节点大小
            if i < size-1 and arr[i] < arr[i+1]:
                child += 1
            if arr[child] > arr[parent]:
                # 把子节点跟父节点交换
                arr[child], arr[parent] = arr[parent], arr[child]
    
    
    def heap_sort(arr, size):
        for i in range(size, 0, -1):
            # 找到最大值
            find_max(arr, i)
            print(arr, '---')
            # 把最大值往后放
            arr[0], arr[i-1] = arr[i-1], arr[0]
            print(arr, '===')
    
    if __name__ == "__main__":
        l = [3, 1, 4, 9, 6, 10, 5, 8, 2, 7]
        heap_sort(l, 10)
        print(l)
        
    # [10, 3, 9, 1, 7, 4, 5, 8, 2, 6] ---
    # [6, 3, 9, 1, 7, 4, 5, 8, 2, 10] ===
    # [9, 6, 8, 3, 7, 4, 5, 1, 2, 10] ---
    # [2, 6, 8, 3, 7, 4, 5, 1, 9, 10] ===
    # [8, 2, 7, 5, 6, 4, 3, 1, 9, 10] ---
    # [1, 2, 7, 5, 6, 4, 3, 8, 9, 10] ===
    # [7, 1, 6, 5, 2, 4, 3, 8, 9, 10] ---
    # [3, 1, 6, 5, 2, 4, 7, 8, 9, 10] ===
    # [6, 3, 5, 1, 2, 4, 7, 8, 9, 10] ---
    # [4, 3, 5, 1, 2, 6, 7, 8, 9, 10] ===
    # [5, 4, 3, 1, 2, 6, 7, 8, 9, 10] ---
    # [2, 4, 3, 1, 5, 6, 7, 8, 9, 10] ===
    # [4, 2, 3, 1, 5, 6, 7, 8, 9, 10] ---
    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ===
    # [3, 1, 2, 4, 5, 6, 7, 8, 9, 10] ---
    # [2, 1, 3, 4, 5, 6, 7, 8, 9, 10] ===
    # [2, 1, 3, 4, 5, 6, 7, 8, 9, 10] ---
    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ===
    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ---
    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10] ===
    # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    
    此时此刻,非我莫属
  • 相关阅读:
    P5107 能量采集
    P4655 [CEOI2017]Building Bridges
    P1129 [ZJOI2007]矩阵游戏
    P5299 [PKUWC2018]Slay the Spire
    P1625求和 giao精大杂烩
    背包
    根号分治
    CF963B
    国王游戏
    P6006 USACO 3SUM G
  • 原文地址:https://www.cnblogs.com/taozhengquan/p/15333054.html
Copyright © 2011-2022 走看看