堆排序
堆的性质(大根堆):父节点大于左右儿子
堆排序
建堆
每次拿堆顶元素和末尾 i 进行交换(相当于 i~n 都是排好序的)。交换后堆顶破坏了堆的性质,把它堆化。
建堆
从最后一个非叶子节点 r 开始,对它记性siftDown(r)siftDown(r)siftDown(r) 操作,也就是如果它的儿子比它大就交换。如果交换后破坏了儿子为根的堆,那么向下递归。
//siftDown操作相当于维护以r为根的堆
void siftDown(vector<int>& nums, int
原创
2021-03-25 13:53:07 ·
55 阅读 ·
0 评论