使用C++实现堆排序算法
堆排序是基于堆数据结构的高效排序算法,时间复杂度O(n log n),空间复杂度O(1),适用于大规模数据。堆是特殊完全二叉树,分大顶堆(父≥子)和小顶堆,排序常用大顶堆。其存储为数组,索引i的父节点为(i-1)/2,左右子节点为2i+1和2i+2。核心步骤:1.构建初始大顶堆(从最后非叶子节点向上调整);2.排序(交换堆顶与未排序末尾元素,调整堆,重复直至完成)。C++实现包含swap、max_heapify(迭代调整子树为大顶堆)、heap_sort(构建堆并排序)函数,主函数测试数组排序,输出结果正确。
阅读全文使用Python实现堆排序算法
堆排序是利用堆数据结构的高效排序算法,时间复杂度稳定为O(n log n),空间复杂度O(1),适合大规模数据排序。堆是完全二叉树,父节点值≥(最大堆)或≤(最小堆)子节点值。数组中堆的索引关系:父节点i的子节点为2i+1、2i+2,子节点j的父节点为(j-1)//2。 核心操作包括:1. **Heapify**:调整以i为根的子树为最大堆,递归比较子节点并交换;2. **构建最大堆**:从最后非叶子节点(n//2-1)向上调整所有节点,确保整体满足最大堆性质。 排序流程:先构建最大堆,再反复交换堆顶(最大值)与堆尾元素,同时调用Heapify调整剩余元素为最大堆,最终得到有序数组。堆排序为原地排序,适用于大数据量场景。
阅读全文堆是什么?数据结构中堆的基本操作详解
堆是基于完全二叉树的特殊结构,用数组存储,满足大顶堆(父节点值≥子节点)或小顶堆(父节点值≤子节点)性质,能高效获取最值,广泛应用于算法。数组索引映射父子关系:左子节点2i+1,右子节点2i+2,父节点(i-1)//2。大顶堆根节点最大(如[9,5,7,3,6,2,4]),小顶堆根节点最小(如[3,6,5,9,7,2,4])。核心操作:插入(新元素放末尾,上浮调整至父节点满足堆性质)、删除(交换堆顶与末尾元素,下沉调整至堆顶满足性质)、构建堆(从最后非叶子节点开始依次下沉调整)、获取堆顶(直接取根节点)。应用于优先队列、堆排序、Top K问题。堆结构与操作高效,对理解算法至关重要,初学者可从数组模拟入手掌握。
阅读全文