堆排序
class Solution {
public int[] sortArray(int[] nums) {
heapSort(nums);
return nums;
}
public void heapSort(int[] nums) {
int len = nums.length;
maxHeap(nums, len);
for (int i = len-1; i >= 1; --i) {
int temp = nums[0];
nums[0] = nums[i];
nums[i] = temp;
heapify(nums, i, 0);
}
}
public void maxHeap(int[] nums, int len) {
int index = ((len-1)-1)/2;
for (int i = index; i >= 0; --i) {
heapify(nums, len, i);
}
}
public void heapify (int[] nums, int len, int maxIndex) {
if (maxIndex >= len) {
return;
}
int leftIndex = maxIndex*2 + 1;
int rightIndex = maxIndex*2 + 2;
int currIndex = maxIndex;
if (leftIndex < len && nums[leftIndex] > nums[maxIndex]) {
maxIndex = leftIndex;
}
if (rightIndex < len && nums[rightIndex] > nums[maxIndex]) {
maxIndex = rightIndex;
}
if (currIndex != maxIndex) {
int temp = nums[maxIndex];
nums[maxIndex] = nums[currIndex];
nums[currIndex] = temp;
heapify(nums, len, maxIndex);
}
}
}