堆:堆的结构与应用,最小堆和最大堆入门
堆是一种特殊的完全二叉树,核心特点是父节点与子节点满足大小关系(最小堆父≤子,最大堆父≥子),能高效获取极值(堆顶为最小或最大元素),类似优先队列。其底层为完全二叉树,每一层尽量填满,最后一层从左到右排列。数组存储时,左子节点索引=2i+1,右子节点=2i+2,父节点=(i-1)//2。基本操作包括插入(末尾添加后上浮)和删除(堆顶删除后尾元素顶替,再下沉),时间复杂度均为O(log n)。堆广泛用于优先队列(任务调度)、找第k大元素、哈夫曼编码等场景,是高效处理极值问题的关键结构。
阅读全文使用Python实现堆排序算法
堆排序是利用堆数据结构的高效排序算法,时间复杂度稳定为O(n log n),空间复杂度O(1),适合大规模数据排序。堆是完全二叉树,父节点值≥(最大堆)或≤(最小堆)子节点值。数组中堆的索引关系:父节点i的子节点为2i+1、2i+2,子节点j的父节点为(j-1)//2。 核心操作包括:1. **Heapify**:调整以i为根的子树为最大堆,递归比较子节点并交换;2. **构建最大堆**:从最后非叶子节点(n//2-1)向上调整所有节点,确保整体满足最大堆性质。 排序流程:先构建最大堆,再反复交换堆顶(最大值)与堆尾元素,同时调用Heapify调整剩余元素为最大堆,最终得到有序数组。堆排序为原地排序,适用于大数据量场景。
阅读全文