堆排序(Python)

孤者浪人 提交于 2019-12-19 03:55:53

1、堆

  • 堆是一个完全二叉树。
  • 堆中每一个节点的值都必须大于等于(或小于等于)其子树中每个节点的值。

2、堆的操作

2.1、往堆中插入一个元素

 

2.2、删除堆顶元素

 

 

3、堆排序

  • 借助于堆这种数据结构实现的排序算法,就叫作堆排序。时间复杂度非常稳定,是 O(nlogn),并且还是原地排序算法。
  • 堆排序的过程大致分解成两个大的步骤:建堆排序

3.1、建堆

 

3.2、排序

 

4、小结

堆是一种完全二叉树,它最大特性:每个节点的值都大于等于(或小于等于)其子树节点的值。因此堆被分成了两类,大顶堆和小顶堆。

堆中比较重要的两个操作是插入一个数据和删除堆顶元素。这两个操作都要用到堆化。

  • 插入一个数据的时候,我们把新插入的数据放到数组的最后,然后从下往上堆化;
  • 删除堆顶数据的时候,我们把数组中的最后一个元素放到堆顶,然后从上往下堆化。这两个操作时间复杂度都是 O(logn)。

堆排序

  • 堆排序包含两个过程,建堆和排序。我们将下标从 2n​ 到 1 的节点,依次进行从上到下的堆化操作,然后就可以将数组中的数据组织成堆这种数据结构。
  • 接下来,我们迭代地将堆顶的元素放到堆的末尾,并将堆的大小减一,然后再堆化,重复这个过程,直到堆中只剩下一个元素,整个数组中的数据就都有序排列了。
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!