voidheapSort(vector<int>& nums){ int len = nums.size()-1; //先建一个大根堆 buildMaxHeap(nums, len); for(int i = len;i >= 1; --i){ //将堆顶和最后一个元素交换位置 swap(nums[i], nums[0]); len -= 1; //最后i个已经排好序,将前len-i个继续建一个大根堆,重复以上过程 maxHeapify(nums,0,len); } } voidbuildMaxHeap(vector<int>& nums, int len){ //从最后一个父节点开始判断,让每个父节点都大于自己的孩子节点 for (int i = len / 2; i >= 0; --i) { maxHeapify(nums, i, len); } } voidmaxHeapify(vector<int>& nums, int i, int len){ // for循环递归调整受影响的子树 for (; (i << 1) + 1 <= len;) { int lson = (i << 1) + 1; int rson = (i << 1) + 2; int large; if (lson <= len && nums[lson] > nums[i]) { large = lson; } else { large = i; } if (rson <= len && nums[rson] > nums[large]) { large = rson; } if (large != i) { swap(nums[i], nums[large]); i = large; } else { break; } } } vector<int> sortArray(vector<int>& nums){ heapSort(nums); return nums; }