1、堆
- 堆是一个完全二叉树。
- 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。
2、堆的操作
2.1、往堆中插入一个元素
2.2、删除堆顶元素
3、堆排序
- 借助于堆这种数据结构实现的排序算法,就叫作堆排序。时间复杂度非常稳定,是 O(nlogn),并且还是原地排序算法。
- 堆排序的过程大致分解成两个大的步骤:建堆和排序。
3.1、建堆
3.2、排序
4、小结
堆是一种完全二叉树,它最大特性:每个节点的值都大于等于(或小于等于)其子树节点的值。因此堆被分成了两类,大顶堆和小顶堆。
堆中比较重要的两个操作是插入一个数据和删除堆顶元素。这两个操作都要用到堆化。
- 插入一个数据的时候,我们把新插入的数据放到数组的最后,然后从下往上堆化;
- 删除堆顶数据的时候,我们把数组中的最后一个元素放到堆顶,然后从上往下堆化。这两个操作时间复杂度都是 O(logn)。
堆排序
- 堆排序包含两个过程,建堆和排序。我们将下标从 2n 到 1 的节点,依次进行从上到下的堆化操作,然后就可以将数组中的数据组织成堆这种数据结构。
- 接下来,我们迭代地将堆顶的元素放到堆的末尾,并将堆的大小减一,然后再堆化,重复这个过程,直到堆中只剩下一个元素,整个数组中的数据就都有序排列了。
来源:CSDN
作者:NLP_victor
链接:https://blog.csdn.net/IOT_victor/article/details/103604409