什么是堆排序?
是指利用堆这种数据结构所设计的一种排序算法。堆积是一个近似完全二叉树的结构,并同时满足堆积的性质:即子结点的键值或索引总是小于(或者大于)它的父节点
在看本文之前请先了解以下概念
完全二叉树:除了最后一层之外的其他每一层都被完全填充,每一层从左到右的填充数据,不能空缺(只是类似这个结构,所以本文不会用到这个知识点)
堆:分为大顶堆和小顶堆两种
大顶堆(小顶堆):可分为有序区和无序区,初始全部为无序区
执行的步骤是如何进行的?
无非就是将一个无序数组转化为大顶堆(小顶堆)
将堆顶的值和无序数组末尾值交换位置
根据堆的性质进行调整,成为大顶堆(小顶堆)
然后又继续 1~3 的步骤,反反复复直到无序区没有值为止
这个时候肯定会有人问,怎么区别有序区和无序区?什么是大顶堆(小顶堆)?以及大顶堆(小顶堆)是如何调整出来的?
如何辨别有序区和无序区?
循环结束后应该是这样的,没有无序区了