• 堆排序的细节和复杂度分析(非常重要,一定要会)


    1.时间复杂度O(NlogN),额外空间复杂度O(1)

    2.二叉树:

      (1)完全二叉树:要么是一棵满二叉树(满二叉树属于完全二叉树);如果不是满二叉树,那么这棵树应该是从左往右依次补齐的。

      (2)通过数组来理解完全二叉树,对于节点i,在不越界的情况下左孩子的下标是2i+1,右孩子下标是2*i+2,如果数组越界了,那就说明右孩子不存在。对于节点i,它的的父节点的下标是(i-1)/2。0的父节点是自己。

    3.大根堆(堆就是一棵完全二叉树),即在一棵完全二叉树中,任何一棵子树的最大值都是这课子树的头部,小根堆同理,任何一棵子树的最小值都是这课子树的头部,对于任何一棵子树都是这样的。建立大根堆的时间复杂度是O(N),heapinsert的调整,经历一个新节点加入到这棵树种,同时向上调整的过程。对于i号节点加入进来调整的代价是O(log(i-1)),第i+1个节点加入进来调整的代价是O(log(i)),对于n个节点的调整代价是log1+log2+log3+......+log(n-1),这是整个数组所有节点加进来变成完全二叉树的时间复杂度O(N),再重复一遍,建立大根堆的时间复杂度是O(N)。把节点加入到堆的最后一个位置,然后将节点向上调整的过程。

    4.堆结构非常重要:堆可以搞定几乎所有的贪心算法。

    5.堆排序非常重要

      (1)堆排序heap insert与heapify。

      (2)堆结构的增大与减少。

      (3)如果只是建立堆得过程,时间复杂度为O(N)。

      (4)优先级队列结构,就是堆结构。

    6.数组堆排序的过程:

      (1)让数组变成大根堆,然后将堆顶元素弹出,调整堆,继续之前操作。

    6.举例:

      对于数组 :2 1    3    6    0     4

    具体细节下一博客讲

  • 相关阅读:
    力扣第945题 使数组唯一的最小增量
    力扣第365题 水壶问题
    力扣面试题40 最小的k个数
    力扣第409题 最长回文串
    力扣第46题 全排列
    力扣第1160题 拼写单词
    力扣面试题01.06 字符串压缩
    力扣第695题 岛屿的最大面积
    树莓派 鼠标自动消失
    树莓派 VNC 远程桌面 同一个桌面
  • 原文地址:https://www.cnblogs.com/bigdata-stone/p/10475423.html
Copyright © 2020-2023  润新知