做汽车价格的网站,品牌型网站的作用,wordpress自动加标签,网站建设的整体流程有哪些?堆排序#xff1a;
声明全局堆长度建堆#xff08;大顶堆#xff09;从最后一个元素开始向前遍历#xff0c;进行#xff1a;1. 交换最后元素和堆顶元素#xff1b;2. 全局堆长度-1#xff1b;3. 调整大顶堆#xff08;从第0个位置开始#xff09;
建堆#xff1a;…堆排序
声明全局堆长度建堆大顶堆从最后一个元素开始向前遍历进行1. 交换最后元素和堆顶元素2. 全局堆长度-13. 调整大顶堆从第0个位置开始
建堆 从nums.length/2-1的元素开始向前遍历调整每个元素作为堆顶元素的堆
调整堆
找到i的左右子节点的位置left和right分别比较left和i、right和i谁更大用largest指向如果largesti表明已经是个大顶堆否则交换largest和i位置的元素递归调整largest作为堆顶元素的堆
class Solution {static int heapLen;public int[] sortArray(int[] nums) {heapSort(nums);return nums;}public void heapSort(int[] nums) {heapLen nums.length;buildHeap(nums);// for (int i heapLen - 1; i 0; --i) {for (int i nums.length - 1; i 0; --i){swap(nums, 0, i);--heapLen;// adjustHeap(nums, i);adjustHeap(nums, 0);}}public void buildHeap(int[] nums) {for (int i nums.length / 2 - 1; i 0; --i) {adjustHeap(nums, i);}}public void adjustHeap(int[] nums, int i) {int left 2 * i 1;int right 2 * i 2;int largest i;// if (left heapLen nums[left] nums[largest]) largest left;if (right heapLen nums[right] nums[largest]) largest right;if (left heapLen nums[left] nums[largest]) largest left;if (largest ! i) {swap(nums, i, largest);adjustHeap(nums, largest);}}public void swap(int[] nums, int i, int j) {int temp nums[i];nums[i] nums[j];nums[j] temp;}
}