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

    堆是一种二叉树结构

    大顶堆:任一父节点比子节点大

    小顶堆:父节点比任一子节点小

    堆的建立过程即使大/小顶堆的构建过程,给定一个数组,首先初始化,再进行堆的调整

    建立大顶堆:

    def buildMaxHeap(arr):
    length = len(arr)
    for i in range(length//2,-1,-1):
    heapify(arr,i,length)


    def heapify(arr,i,length):
    left = 2*i+1 #左孩子
    right= 2*i+2 #右孩子
    largest =i
    if left < length and arr[left]>arr[largest]:
    largest = left
    if right < length and arr[right]>arr[largest]:
    largest = right
    if largest != i:
    arr[largest],arr[i] = arr[i],arr[largest]
    heapify(arr,largest,length) #由于每次堆顶和堆尾元素置换后会破坏原有的堆结构,保证置换到堆顶的元素能够调整到合适的位置


    def heapSort(arr):
    length = len(arr)
    buildMaxHeap(arr) #构建大顶堆
    for i in range(length-1,-1,-1):
    arr[0],arr[i] = arr[i],arr[0] #堆顶和末尾元素置换
    length-=1
    heapify(arr,0,length)
    return arr

    建立小顶堆:同理大顶堆,只需调整heapify方法

  • 相关阅读:
    单表查询与多表查询
    我对Jenkins的认识
    Jenkins的使用
    关于CDN的认识
    linux permission denied解决方法
    linux 最近使用的命令
    JVM相关参数的采集
    double 和 float
    BlockingQueue 阻塞队列,很有用的一种
    使用maven打包的注意事项
  • 原文地址:https://www.cnblogs.com/bianque/p/13490758.html
Copyright © 2011-2022 走看看