【数据结构与算法】堆排序算法回顾

如题所述

第1个回答  2022-06-12

堆排序是利用堆这种数据结构而设计的一种排序算法,堆排序是一种选择排序,它的最坏,最好,平均时间复杂度均为O(nlogn),它也是不稳定排序。

堆排序的应用场景主要有:topk问题,优先级队列等。

原理:
1.将存放在array[0,…,n-1]中的n个元素建成初始堆;
2.此时,堆顶元素该堆的最大值
3.将堆顶元素与堆底元素进行交换,则序列的最大值即已放到正确的位置;
4.但此时堆被破坏,将堆顶元素向下调整使其继续保持大根堆的性质,再重复第3,4步,直到堆中仅剩下一个元素为止。

1.初始化堆

经过初始化堆的过程,现在可以发现,最大的数已经在堆顶了
2.堆排序
现在我们要做的是将整个堆变成有序的堆

堆排序是一种选择排序,整体主要由构建初始堆+交换堆顶元素和末尾元素并重建堆两部分组成。其中构建初始堆经推导复杂度为O(n),在交换并重建堆的过程中,需交换n-1次,而重建堆的过程中,根据完全二叉树的性质,[log2(n-1),log2(n-2)...1]逐步递减,近似为nlogn。所以堆排序时间复杂度一般认为就是O(nlogn)级。

相似回答