目录

一、堆的相关概念

二、堆排序动图

三、堆排序思路

 1、 建立逻辑上的大顶堆

 2、不断调整重建大顶堆,堆顶元素和末尾元素进行交换,得到最大值下沉到数组末端


一、堆的相关概念

       堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。堆排序是利用堆这种数据结构而设计的一种排序算法,下面着重介绍一下堆的相关概念。直接借鉴百度百科。

八大内部排序算法-堆排序

      所以堆首先是一颗完全二叉树。

      每个结点的值都大于或等于其左右孩子结点的值,称为大根堆, 注意 : 没有要求结点的左孩子的值和右孩子的值的大小关系。

      每个结点的值都小于或等于其左右孩子结点的值,称为小根堆。

     八大内部排序算法-堆排序

八大内部排序算法-堆排序
大根堆和小根堆

 


二、堆排序动图

八大内部排序算法-堆排序
堆排序动图

三、堆排序思路

  1. 将无序序列构建成一个堆,根据升序降序需求选择大根堆或小根堆。

  2. 将堆顶元素和末尾元素交换,将最大元素“沉”到数组末端。

  3. 重新调整结构,使其满足堆定义,然后继续交换堆顶元素和当前末尾元素,反复执行调整+交换步骤,直到整个序列有序。

          说实话,找了好几篇帖子才看懂一点,另外我觉得堆排序似乎是“选泡插,快归堆希桶计基; 恩方恩老恩一三,对恩加K恩乘K。 选快堆希都不稳(ps:时常背口诀haha)中最复杂的,下面的思路都是建立的大根堆。

         以数组[3,7,8,20,16,17]为例子,总所周知,数组和二叉树是可以相互转化的,堆是作为二叉树的一种典型数据结构。

         首先明确很重要的一点就是整个排序过程中,并没有真正创建过树,整个过程中,其实都是在对数组进行操作。在对数组操作的时候,是以大顶堆其中的规则来进行操作的。

 1、 建立逻辑上的大顶堆

八大内部排序算法-堆排序

 2、不断调整重建大顶堆,堆顶元素和末尾元素进行交换,得到最大值下沉到数组末端

八大内部排序算法-堆排序

 

 

相关文章: