堆排序思路讲解

农历腊月二十八,快过年喽,咱们来聊聊堆排序吧。
物理存储结构是一维数组,逻辑存储结构是完全二叉树。
是一棵无序树
堆排序是利用了这个数据结构而设计的一种排序算法,是一种选择排序,最好,最坏,平均时间复杂度都是 O(nlogn),是不稳定的排序
(不稳定的排序是指 如果有两个相同的数字,在排序之后位置发生了变化,即为不稳定的排序)
下面是堆的结构
大顶堆和小顶堆
大顶堆:每个结点的值都大于或等于其左右孩子结点的值。
小顶堆:每个结点的值都小于或等于其左右孩子结点的值。
如图:
四年哦我RPG皮
构建完堆结构之后,剩下的就是堆排序的思想了。
我以大顶堆为例。
每次将堆顶的元素和树中最后一个叶子节点交换,然后就取得了这个树中的最大值,再将这个交换后的树,再次按照构建大顶堆的方法,再次调整,使其满足最大值在堆顶,再次执行交换,直到将所有节点都取出得到,排列出一个降序的组合就完成了。
放个图吧,多看几遍一定能看懂。
在这里插入图片描述 如果有不对的地方,还请多指教呀,大家一起进步呀!