了解什么是堆
什么是堆,堆的定义是:n个元素的序列,{k1 ,k2,k3,…,kn},当且满足如下关系式,称为堆。
ki < k2i && ki < k2i+1
ki > k2i && ki > k2i+1
如下所示:
如何利用堆来排序
将一个无序序列建成堆
堆看作是一个完全二叉树,堆就完全满足二叉树的五个性质,如果不清楚的可以去看看二叉树的性质。
从堆中最后一个非终点[n / 2] 个元素,向前慢慢筛选,一直到[ 1 ] ,
如何输出堆顶元素后,调整剩余元素为堆
如果是每一个父节点都对左右孩子节点大的,就是大根堆,可知,堆顶的元素就是最大的,相反的话,就是小根堆,堆顶元素就是最小的。
大根堆用来做顺序,每次将堆顶的元素,和堆尾的元素交换,然后将剩下的节点变成大根堆,最后一个元素就变成了最大的。小根堆相反。