minHeapFixDown的递归和迭代形式

// 把以i为根节点的二叉堆调整成小顶堆public static void minHeapFixDown(int[] arr, int i, int n) {// 找到左右孩子int left = 2 * i + 1;int right = 2 * i + 1;// 找到左右孩子中的最小孩子// 左孩子越界,右孩子必越界,根节点为叶子节点,此为递归出口if (left >= arr.length) {return;}int min = left;// 只有左孩子if (left == arr.length - 1) {} else {if (arr[left] > arr[right]) {min = right;}}// 如果根节点比左右孩子都要小,不用调整// 否则选取左右孩子中最小的节点,与根节点交换// 对选取的孩子节点,以其为根节点对二叉堆进行递归调整if (arr[i] <= arr[min]) {return;} else {swap(arr, i, min);i = min;// 移动根minHeapFixDown(arr, i, n);}}
// 迭代形式的siftDownpublic static void siftDown(int[] arr, int i, int n) {int left = 2 * i + 1;while (left < n) {int right = left + 1;int min = left;if (right < n && arr[left] > arr[right]) {min = right;}if (arr[i] <= arr[min]) {// 无需调整break;}swap(arr, i, min);i = min;left = 2 * i + 1;}}

堆排序|minHeapFixDown的递归和迭代形式相关推荐

  1. 一起学DNS系列(十)图、例详解DNS递归和迭代查询原理及过程 (1)

    上节中提到了一些有关递归查询的内容,但说的很少,也很笼统,本节将会从原理和实例两方面入手分析DNS的递归以及迭代查询. 在此之前,我们需要了解一些背景知识,以便于更好的理解今天的主题内容. 在互联网中 ...

  2. LeetCode--144,94,145,102 二叉树的前序、中序、后序、层序遍历(递归,迭代,栈,队列)

    二叉树的前序.中序.后序.层序遍历(递归,迭代,栈,队列) 1. 二叉树的前序遍历 1.1 题目描述 1.2 题目分析 1.3 Python实现 2. 二叉树的中序遍历 2.1 题目描述 2.2 题目 ...

  3. 计算机科学中的递归算法是把问题,从计算思维的视角辨析算法中的递归与迭代...

    周世杰 算法思维是计算思维的一个方面,而在计算机科学中,基于递归和迭代的思维方式在算法和程序设计中广泛应用,是算法思维的重要构成部分.因此,信息技术学科教师在基础课教学中辨析递归与迭代算法,将其作为发 ...

  4. 【C语言】函数 ---- 函数的嵌套调用和链式访问、函数的声明和定义、变量的声明和定义、函数递归与迭代、递归时的栈溢出问题

    函数 一.函数的嵌套调用和链式访问 1.嵌套调用 2.链式访问 2.1strlen()函数 2.2printf()函数 二.函数的声明和定义 1.函数声明和定义的介绍 2.函数声明和定义的使用 三.变 ...

  5. 递归与迭代的区别分析

    递归和迭代是很重要的编程思想,所以对于其原理还是很有必要清楚的. 迭代(iteration) 在 维基百科 上是这样介绍的: Iteration is the repetition of a proc ...

  6. python递归和循环的区别_Python递归与迭代

    1.递归与迭代: 递归和迭代都是循环的一种.简单地说,递归是重复调用函数自身实现循环.迭代是函数内某段代码实现循环,而迭代与普通循环的区别是:循环代码中参与运算的变量同时是保存结果的变量,当前保存的结 ...

  7. 算法 - 递归与迭代 区别与联系

    目录 迭代 递归 基本概念 应用场景 尾递归 递归与迭代区别 递归与迭代的转换 参考 文章放置于:https://github.com/zgkaii/CS-Notes-Kz,欢迎批评指正! 迭代 迭代 ...

  8. 数据结构(邓俊辉):递归和迭代、分而治之和减而治之(2.例子)

    前文介绍了递归和迭代.减而治之和分而治之的概念. 数据结构(邓俊辉):递归和迭代.分而治之和减而治之(1.概念) 接下来举一些例子来解释: 以数组求和为例: 采用减而治之(线性递归)的办法: int ...

  9. java递归和迭代_Java中的迭代与递归

    递归 提到迭代,不得不提一个数学表达式: n!=n*(n-1)*(n-2)*...*1 有很多方法来计算阶乘.有肯定数学基础的人都知道n!=n*(n-1)!因而,代码的实现可以直接写成: 代码一 in ...

最新文章

  1. 关于 AIOps 的过去与未来,微软亚洲研究院给我们讲了这些故事
  2. juc java_深入理解JUC(java.util.concurrent)
  3. 会声会影如何渲染高清视频
  4. TFT_LCD液晶屏驱动设计与验证
  5. 猎鹰spacex_我从SpaceX中学到的关于开源的一切
  6. eclipse中代码整体左右移动的方法
  7. react 遍历对象_React 和 Vue 之间的相爱相杀
  8. YOLODet最新算法的目标检测开发套件,优化到部署
  9. oralce入门学习
  10. 记阿里电话面试失败过程
  11. 无源晶振有方向吗?无源贴片晶振贴反会怎样?
  12. JSCORE03(达)
  13. pybullet机器人运动质心轨迹/足端轨迹显示adduserdebugline
  14. 【jQwidgets】简单封装示例
  15. mac环境下搭建frida环境并连接网易mumu模拟器
  16. 【SDOI2010】【BZOJ1924】所驼门王的宝藏
  17. 解决word里没有Endnote加载项
  18. 3D-LaneNet:端到端三维多车道检测ICCV2019
  19. python公开课乐博学院_当我学完 Python ,我学会了些什么【乐搏TestPRO】
  20. SVN客户端TortoiseSVN基本使用方法步骤-初人指南

热门文章

  1. 计算安全和无条件安全
  2. 风车IM即时通讯私有云,独立部署的安全聊天系统
  3. 详解T507 核心板引脚功能修改指引-飞凌嵌入式
  4. 计算机在剪辑方面的应用,简论计算机多媒体技术在影视后期制作中的应用
  5. opencv条形码识别(已经实现)
  6. 用python来创建微信机器人,跟基友网恋聊天(滑稽)
  7. 电池续航智能穿戴设备突破瓶颈
  8. android 垂直水平居中对齐,Android中RelativeLayout的字符水平(垂直居中)对齐
  9. Python读取本地html文件内容存csv
  10. Suspicious.MH690