#include<iostream>#include<vector>usingnamespace std;voidheapify(vector<int>& nums,int n,int i){int largest = i;//当前需要调整为堆结构的节点int lson = i *2+1;int rson = i *2+2;if(lson < n && nums[lson]> nums[largest]){
largest = lson;}if(rson < n && nums[rson]> nums[largest]){
largest = rson;}if(largest != i){swap(nums[i], nums[largest]);heapify(nums, n, largest);}}voidheapSort(vector<int>& nums,int n){//建堆for(int i = n /2-1; i >=0;--i){heapify(nums, n, i);//对所有具有子节点的节点构建堆排序}//排序for(int i = n -1; i >0;--i){swap(nums[i], nums[0]);heapify(nums, i,0);//将最大的节点换到最后一个位置,并在下次调整时不考虑}}intmain(){
vector<int> nums ={1,2,4,5,3,3,8,6};heapSort(nums, nums.size());for(int& i : nums) cout << i <<" ";}