java常见排序算法——堆排序(附代码示列)

2025年01月13日 建站教程

public void heapSort2(int[] nums) {
  for(int i = nums.length/2-1; i >= 0; i--){
      sift(nums, i, nums.length);
  }
  for (int i = nums.length-1; i > 0; i--) {
      int temp = nums[0];
      nums[0] = nums[i];
      nums[i] = temp;
      sift(nums, 0, i);
  }
}

private void sift(int[] nums, int parent, int len) {
  int value = nums[parent];
  for (int child = 2*parent +1; child < len; child = child*2 +1) {
      if(child+1 < len && nums[child+1] > nums[child]){
          child++;
      }
      if(nums[child] > value){
          nums[parent] = nums[child];
          parent = child;
      } else {
          break;
      }
  }
  nums[parent] = value;
}

PS:大顶堆实现升序,每次将最大值移到堆的最后一个位置上

本文链接:http://so.lmcjl.com/news/21260/

展开阅读全文
相关内容