堆排序Java实现
class Solution {
public int[] sortArray(int[] nums) {
int n = nums.length;
buildHeap(nums,n);
for(int i = n - 1; i >= 0; i--){
swap(nums, i, 0);
heapfiy(nums, i ,0);
}
return nums;
}
public static void swap(int[] nums, int i, int max){
int temp = nums[i];
nums[i] = nums[max];
nums[max] = temp;
}
public static void heapfiy(int[] nums, int n, int i){
if(i >= n){
return;
}
int leftCh = 2 * i + 1;
int rightCh = 2 * i + 2;
int max = i;
if(leftCh < n && nums[leftCh] > nums[max]){
max = leftCh;
}
if(rightCh < n && nums[rightCh] > nums[max]){
max = rightCh;
}
if(max != i){
swap(nums,i, max);
heapfiy(nums, n, max);
}
}
public static void buildHeap(int[] nums, int n){
int lastNode = n - 1;
int parent = (lastNode - 1) / 2;
for(int i = parent; i >= 0; i--){
heapfiy(nums, n, i);
}
}
}
参考
堆排序(正月点灯笼)