完全二叉树应用之 堆排序算法
原理
完全二叉树:严格按照从上到下,从左到右的排序二叉树
步骤:
1、根据初始关键字创建堆
2、输出堆顶最大(大根堆)或最小元素(小根堆)
3、调整剩下的元素,使其成为一个新堆 (从 size /2 处开始,即倒数第二层的最后一个根节点开始 headpify)
4、重复(2)(3)直到输出n个元素得到一个有序序列
/*
* @Description: 最小堆排序算法
* @Version: 0.1
* @Autor: Wyz
* @Date: 2021-09-09 11:29:53
*/
#include <iostream>
#include <vector>
using namespace std;
// 完全二叉树按数组形式排序,第 i 位的左子树(2*i+1), 右子树(2*i+2)
class Solution{
public:
void swap(int& a, int& b){
int temp = b;
b = a;
a = temp;
}
/* 堆调整 */
void heapify(vector<int>& tree ,int size, int i){