import java.util.Arrays;
class Solution {
public static void main(String[] args) {
int[] nums = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9};
new Solution().sortArray(nums);
System.out.println(Arrays.toString(nums));
}
public int[] sortArray(int[] nums) {
builtHeap(nums);
for (int i = nums.length - 1; i >= 0; i--) {
swap(nums,i,0);
heapfiy(nums,i,0);
}
return nums;
}
public void builtHeap(int[] nums) {
int last_node = nums.length - 1;
int parent = (last_node - 1) / 2;
for (int i = parent; i >= 0; i--) {
heapfiy(nums, nums.length, i);
}
}
public void heapfiy(int[] nums, int n, int i) {
if (i >= n) {
return;
}
int left = (2 * i) + 1;
int right = (2 * i) + 2;
int max = i;
if (left < n && nums[left] > nums[max]) {
max = left;
}
if (right < n && nums[right] > nums[max]) {
max = right;
}
if (max != i) {
swap(nums, max, i);
heapfiy(nums, n, max);
}
}
public void swap(int[] nums, int curr, int i) {
int temp = nums[i];
nums[i] = nums[curr];
nums[curr] = temp;
}
}
堆排序(Java代码实现)
于 2022-02-14 17:56:30 首次发布