(1)将带排序的序列构造成一个大顶堆,根据大顶堆的性质,当前堆的根节点(堆顶)就是序列中最大的元素; (2)将堆顶元素和最后一个元素交换,然后将剩下的节点重新构造成一个大顶堆; (3)重复步骤2,如此反复; (4)从第一次构建大顶堆开始,每一次构建,我们都能获得一个序列的最大值,然后把它放到大顶堆的尾部。
-1, -1):heapify(arr,n,i)# 一个一个取出元素foriinrange(n-1,0,-1):arr[i],arr[0]=arr[0],arr[i]# 交换heapify(arr,i,0)# 测试堆排序
对这个堆进行排序 defheap_sort(nums):# 建堆: 从最后一个父节点开始, 从右往左, 从下往上, 依次对父节点进行向下调整, 最终会构建成一个堆# 父节点(下标i)的左孩子下标为2*i+1, 右孩子下标为2*i+2# 左孩子和右孩子(下标j)的父节点(j-1)//2, 因此最后一个父节点坐标为(len(nums)-1-1)//...
import heapq def heap_sort ( arr ): # 建立一个堆 heapq.heapify(arr) # 从堆中逐一提取元素 sorted_arr = [] while arr: sorted_arr.append(heapq.heappop(arr)) return sorted_arr # 测试堆排序函数arr = [ 5 , 21 , 207 , 19 , 3 ] print (heap_sort(arr)) # 输出:[3, 5...
Python中堆是一种基于二叉树存储的数据结构。 主要应用场景: 对一个序列数据的操作基于排序的操作场景,例如序列数据基于最大值最小值进行的操作。 堆的数据结构: Python 中堆是一颗平衡二叉树(关于二叉树参考数据结构相关知识),且基于小堆进行存储。 何为小堆,简单的说就是根节点永远不大于子节点的一种存储树,如...
堆排序(Heap Sort)是一种基于二叉堆数据结构的排序算法,它通过将元素构建成一个最大堆或最小堆,然后重复从堆中移除根节点,直到堆为空,从而得到有序数组。堆排序是一种原地排序算法,具有稳定的时间复杂度,通常效率较高。本文将详细介绍堆排序的工作原理和Python实现。
本文源自微信公众号【Python编程和深度学习】原文链接:经典排序算法和python详解(三):归并排序、快速排序、堆排序、计数排序、桶排序和基数排序,欢迎关注公众号鸭! 目录 一、归并排序二、快速排序三、堆排序四、计数排序五、桶排序六、基数排序 一、归并排序 归并排序就是利用归并的思想进行排序,也就是分而治之的策...
大顶堆和小顶堆的结构如下所示: 了解了大顶堆和小顶堆的含义之后,我们开始了解堆排序的过程,首先给出如下的一个无序列表,我们用堆的形式来表示这个列表。 第一步:将无序列表构建成一个大顶堆 对于这个堆我们的目的是构造出一个大顶堆,构造的过程中我们需要不断的比较每一个堆结构的大小关系,并切把大的元素...
堆排序算法详解+Python实现 了解了堆。下面我们来看下堆排序的思想是怎样的(以大根堆为例): 首先将待排序的数组构造出一个大根堆 取出这个大根堆的堆顶节点(最大值),与堆的最下最右的元素进行交换,然后把剩下的元素再构造出一个大根堆 重复第二步,直到这个大根堆的长度为1,此时完成排序。