堆排序
- 堆排序的最坏、最好和平均时间复杂度为O(nlogn)
- 以数组来描述堆:以子节点求父节点=(i-1)/2,以父节点求子节点=2i+1 2i+2
- 堆是完全二叉树
- 堆的每个节点的值都大于等于/小于等于其左右子节点的值,a[i]>=a[2i+1]&&a[i]>=a[2i+2]
- 堆排序:
- 堆化操作:完成每个子树的堆化
- 从倒数第二层开始网上开始做堆化操作
- 将堆顶的最大值移到末尾,将树长度-1,循环完成堆排序
1 | #include <iostream> |
Study as if you were going to live forever.
1 | #include <iostream> |