问题:
给你一个整数数组 nums,请你将该数组升序排列。
示例 1:
输入:nums = [5,2,3,1]
输出:[1,2,3,5]
示例 2:
输入:nums = [5,1,1,2,0,0]
输出:[0,0,1,1,2,5]
提示:
1 <= nums.length <= 50000
-50000 <= nums[i] <= 50000
来源:力扣(LeetCode)
方法:
class Solution {
public int[] sortArray(int[] nums) {
buildMaxHeap(nums);
for(int i=nums.length-1;i>=0;i--){
swap(nums,i,0);
maxHeapify(nums,0,i);
}
return nums;
}
public void buildMaxHeap(int[] nums){
for(int i = (nums.length-1)/2;i>=0;i--){
maxHeapify(nums,i,nums.length);
}
}
public void maxHeapify(int[] nums,int i,int len){
int largest = i;
int left = 2*i + 1;
int right = 2*i + 2;
if(left<len&&nums[largest]<nums[left]){
largest = left;
}
if(right<len&&nums[largest]<nums[right]){
largest = right;
}
if(largest!=i){
swap(nums,i,largest);
maxHeapify(nums,largest,len);
}
}
public void swap(int[] nums,int i,int j){
int tmp = nums[i];
nums[i] = nums[j];
nums[j] = tmp;
}
}