classSolution { public: vector<int> sortArray(vector<int>& nums){ buildHeap(nums); int n = nums.size(); for (int i = 0; i < n - 1; ++i) { swap(nums[0], nums[n - 1 - i]); heapAdjust(nums, 0, n - 1 - i); } return nums; } voidheapAdjust(vector<int> &nums, int k, int n) { int i = left(k); while (i < n) { if (i + 1 < n && nums[i] < nums[i+1])++i; if (nums[k] >= nums[i]) break; swap(nums[k], nums[i]); k = i; i = left(k); } } voidbuildHeap(vector<int> &nums) { for (int i = nums.size() / 2 - 1; i >= 0; --i) { heapAdjust(nums, i, nums.size()); } } private: intleft(int i){ return2 * i + 1; } };