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

    原理:https://blog.csdn.net/u013384984/article/details/79496052

    Python实现:

    def sort(array):
        # 遍历非叶子节点
        for i in range(int(len(array) / 2) - 1, -1, -1):
            adjustHeap(array, i, len(array))
    
        # 堆积树建立完成,开始排序
        for j in range(len(array) - 1, 0, -1):
            array[0], array[j] = array[j], array[0]
            adjustHeap(array, 0, j)
    
    
    def adjustHeap(array, i, length):
        # 获取非叶子节点的数据
        temp = array[i]
        # 非叶子节点的左子节点
        k = 2 * i + 1
        # 遍历对比k后面的节点,把temp放入合理位置
        while k < length:
            #  k + 1 < length 确保有左右节点才比较
            if k + 1 < length and array[k] < array[k + 1]:  # 如果左子节点比右子节点小,k就切换到右子节点
                k += 1
            # 如果子节点有更大的
            if array[k] > temp:
                # 父节点替换为更大的
                array[i] = array[k]
                # 记录当前最大点位置
                i = k
            else:
                break
            # k切换到下一个左子节点
            k = 2 * k + 1
        # 此时i是空位,i上层的都比temp大,temp放到这里
        array[i] = temp
    
    
    data = [16, 25, 39, 27, 12, 8, 45, -10, 63]
    sort(data)
    print(data)
    
  • 相关阅读:
    poj_2352树状数组
    poj_2187凸包,暴力解法
    zoj_3735,dp,长沙站j题
    hdu_1698线段树成段更新
    poj_2828线段树,逆序插入
    poj_3371
    poj_3071概率dp
    hdu_2191多重背包
    poj_1185状压dp
    css-margin
  • 原文地址:https://www.cnblogs.com/onenoteone/p/12441709.html
Copyright © 2011-2022 走看看