堆的概念
设有n个元素的序列,当且仅放满足下列关系,称之为堆。
ki<k2i<k(2i+1),父结点小于左右两个子节点,为小顶堆
父结点大于左右两个子节点,为大顶堆。
堆排序的思想是先将序列建立堆,然后输出顶元素,再将剩下的序列建立堆,然后再输出堆顶元素,以此类推。
比如说数组[2,8,7,1,3,5,6,4]
先建立大顶堆
8
/ \
7 6
/ \ / \
1 3 5 4
/
2
先取出堆顶8,得到新的堆
7
/ \
6 5
/ \ / \
1 3 2 4
再取出堆顶7,建立新的堆
以此类推
堆排序的时间复杂度是O(log(2)n),空间复杂度是O(1)