小顶堆关键算法 - 算神码男人系列

Hi, 我是哈缺氧, 小顶堆的关键算法.

小顶堆核心算法, 比较简单, 共大家参考.

private static void makeMinSort(int[] arr, int i, int n) {
  
  // 确定左孩子
  int leftChild = i * 2 + 1;
  // 确定右孩子
  int rightChild = i * 2 + 2;
  // 判断是否越界
  if (leftChild > n || rightChild > n) {
    return;
  }
  // 确定三个最小值
  int min = i;
  if (arr[leftChild] <= arr[rightChild] && arr[leftChild] < arr[i]) {
    min = leftChild;
  }
  if (arr[leftChild] >= arr[rightChild] && arr[rightChild] < arr[i]) {
    min = rightChild;
  }
  // i 最小表示有序
  if (arr[i] < arr[leftChild] && arr[rightChild] > arr[i]) {
    return;
  }

  // 经典交换 a b
  /** 利用 a 交换 b c
   * obj a = b
   * b = c
   * c = a
   */
  int tem = arr[min];
  arr[min] = arr[i];
  arr[i] = tem;

  // 递归解决问题
  makeMinSort(arr, min, n);
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值