#include <bits/stdc++.h>
using namespace std;
void adjust(vector<int> &nums, int i, int n){
// i为待调整的节点,n为nums数组元素的个数,从上往下调整
int j = 2 * i + 1; // 左子节点
while(j < n){
if(j+1 < n && nums[j+1] > nums[j]) j++; // 比较左右孩子谁更大
if(nums[j] < nums[i]) break; // 都比父节点小就停止
else{
swap(nums[i], nums[j]);
i = j; // 继续往下调整
j = 2 * i + 1;
}
}
}
void HeapSort(vector<int> &nums){
int n =nums.size();
for(int i=n/2-1; i>=0; i--){ // 从第一个非叶子节点开始(从下往上看第一个)
adjust(nums, i, n);
}
for(int i=n-1; i>=1; i--){
swap(nums[0], nums[i]); // 交换堆顶和最末一个元素
adjust(nums, 0, i); // 将最末一个元素去除,再进行调整
}
}
int main()
{
vector<int> a = {5,10,7,34,23,58,2,55,35,45,10,23,2,1,33};
HeapSort(a);
for