什么是堆排序?是指利用堆的数据结构设计的一种排序算法。堆叠是一种近似完全二叉树的结构,同时满足堆叠的性质:即子节点的键值或索引总是小于(或大于)其父节点。在阅读本文之前,请理解以下概念完全二叉树:除了最后一层以外的每一层都被完全填充,并且每一层都从左到右填充数据,并且不能为空(就像这个结构,所以堆:分为大顶堆有大顶堆(小顶堆)和小顶堆两种:分为有序区和无序区。初始无序区域中的步骤是如何执行的?无非就是把一个无序数组转成一个大顶堆(smalltopheap),把堆顶的值和无序数组尾部的值进行交换。根据堆的性质调整位置,成为大顶堆(小顶堆),然后继续1~3的步骤重复,直到无序区没有值为止。这时候肯定有人会问,如何区分有序区和无序区呢?什么是大顶桩(smalltoppile)?而大顶堆(小顶堆)又是如何调整的呢?如何区分有序区和无序区?循环结束后,应该是这样的,没有杂乱的区域。大顶堆(smalltopheap))其实是存放在数组中的。现在你应该知道如何区分有序区和无序区,以及大顶堆是如何存储在数组中的。什么是大顶堆(smalltopheap)?从上图大家应该能看出大顶堆和小顶堆的区别吧。大顶堆:每个节点的值都大于或等于其左右子节点的值(从大到小排列)小顶堆:每个节点的值都小于或等于其左右子节点的值左右子节点(小顶堆(smalltoppile)是如何调整的?也是本文最难理解的部分,这里简单介绍一下主要步骤:目标:构建无序数组(R1,R2....Rn)变成一个大的顶堆,即任务初始完成时,这个堆的所有值都属于无序区。交换顶元素R[1]与无序区的最后一个元素R[n],得到一个新的无序区(R1,R2,...Rn-1)和新的有序区(Rn)自新的堆顶R[1]之后exchange可能违反heap的性质,需要调整当前无序区(R1,R2,...Rn-1)为新的heap,将R[1]与无序区的最后一个元素再次交换获得一个新的无序区域(R1,R2....Rn-2)和一个新的有序区域(Rn-1,Rn)。重复这个过程,直到无序区的元素个数为0,则完成整个排序过程。其实主要操作就是构造初始堆和调整堆。每次调整选取父节点(i-1)/2、左子节点(2i+1)、右子节点(2i+2)中最大的与父节点交换位置堆排序过程参考资料神级基础排序——堆排序值得收藏的十大经典排序算法漫画:什么是堆排序?堆排序(大根堆)文章的内容/灵感借鉴自下面的内容【持续维护/更新500+前端面试题/笔记】https://github.com/noxussj/In...[大数据可视化图表插件】https://www.npmjs.com/package...【使用THREE.JS实现3D城市建模(珠海市)】https://3d.noxussj.top/