1. import java.io.*;
  2. import java.util.*;
  3. public class Main
  4. {
  5. public static void main(String args[])
  6. {
  7. Scanner cin = new Scanner(System.in);
  8. //ArrayList<String> list = new ArrayList<String>();
  9. //Scanner scan = new Scanner(System.in); //获取键盘输入的另一种格式
  10. int[] list={}; //如果只是在外部申明而没有静态初始化的话,while里面的数组将变为局部变量,从而在循环外部无法获取
  11. while(cin.hasNextInt())
  12. {
  13. int s=cin.nextInt();
  14. list = new int[s]; // 声明数组长度
  15. for(int i=0;i<list.length;++i){ //给数组赋值
  16. list[i] = cin.nextInt();
  17. }
  18. break;
  19. }
  20. //以下是具体算法,堆排序(非递归)
  21. //1.初始化堆
  22. list = confirm(list,list.length);
  23. //2.开始堆排序
  24.  
  25. for(int j=list.length-1;j>=0;--j){
  26. int tmp=list[j];
  27. list[j]=list[0];
  28. list[0]=tmp;
  29. list = confirm(list,j); //最后一个不需要比较
  30. }
  31.  
  32. for(int i=0;i<list.length;++i){
  33. System.out.println(list[i]);
  34. }
  35. }
  36.  
  37. //初始化堆的方法
  38. public static int[] init(int[] list,int cycnum){
  39. for(int i=cycnum-1;i>=0;--i){
  40. if(2*i+1>cycnum-1){
  41. continue; //到最底层叶子节点时,跳出循环
  42. }
  43. int max=0;//记录左右节点较大的一个,值的大小
  44. int key=0;//记录key的大小
  45. if(2*i+2>cycnum-1){
  46. max=list[2*i+1];
  47. key=2*i+1;
  48. }else{
  49. max=list[2*i+1]>list[2*i+2] ? list[2*i+1]:list[2*i+2];
  50. key=list[2*i+1]>list[2*i+2] ? 2*i+1 : 2*i+2;
  51. }
  52. if(max>list[i]){
  53. list[key]=list[i];
  54. list[i]=max;
  55. }
  56. }
  57. return list;
  58. }
  59.  
  60. public static int[] confirm(int[] list,int cycnum){
  61. for(int j=0;j<=cycnum;++j){
  62. list = init(list,cycnum); //调用堆的方法,只是调用for循环,没有递归
  63. if( list == init(list,cycnum)){
  64. break;
  65. }
  66. }
  67. return list;
  68. }
  69. }

自己写算法---java的堆的非递归遍历的更多相关文章

  1. 非递归遍历二叉树Java版的实现代码(没写层次遍历)

    直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...

  2. 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java

    前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...

  3. 数据结构之二叉树篇卷三 -- 二叉树非递归遍历(With Java)

    Nonrecursive Traversal of Binary Tree First I wanna talk about why we should <code>Stack</c ...

  4. 二叉树3种递归和非递归遍历(Java)

    import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...

  5. 非递归遍历N-ary树Java实现

    2019-03-25 14:10:51 非递归遍历二叉树的Java版本实现之前已经进行了总结,这次做的是非递归遍历多叉树的Java版本实现. 在非递归遍历二叉树的问题中我个人比较推荐的是使用双whil ...

  6. JAVA递归、非递归遍历二叉树(转)

    原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...

  7. Java实现二叉树的创建、递归/非递归遍历

    近期复习数据结构中的二叉树的相关问题,在这里整理一下 这里包含: 1.二叉树的先序创建 2.二叉树的递归先序遍历 3.二叉树的非递归先序遍历 4.二叉树的递归中序遍历 5.二叉树的非递归中序遍历 6. ...

  8. 非递归遍历二叉树Java实现

    2018-10-03 20:16:53 非递归遍历二叉树是使用堆栈来进行保存,个人推荐使用双while结构,完全按照遍历顺序来进行堆栈的操作,当然在前序和后序的遍历过程中还有其他的压栈流程. 一.Bi ...

  9. ZT 二叉树的非递归遍历

    ZT 二叉树的非递归遍历 二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就 是递归定 ...

随机推荐

  1. Git使用手册:HTTPS和SSH方式的区别和使用

    在管理Git项目上,很多时候都是直接使用https url克隆到本地,当然也有有些人使用SSH url克隆到本地.这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制htt ...

  2. 【转载】Myeclipse如何自动创建hibernate

    Myeclipse如何自动创建hibernate:http://jingyan.baidu.com/article/456c463b99f4370a583144a8.html An internal ...

  3. Mysql-5.7.10启动失败 。

    Mysql-5.7.10在免安装后启动服务失败. 查看日志得到如下: 2016-02-19T03:41:05.557095Z 0 [Warning] TIMESTAMP with implicit D ...

  4. javascript设计模式-桥接模式

    在系统中,某些类由于自身逻辑,具有两个或两个以上维度的变化,如何使得该类型可以沿多个方向变化,但又不引入额外的复杂度,这就是桥接模式要解决的问题. 定义:桥接模式(Bridge),将抽象部分与它的实现 ...

  5. Yii cookie 的使用方法

    设置cookie: //首先新建cookie$cookie = new CHttpCookie('mycookie', 'this is my cookie');//定义cookie的有效期$cook ...

  6. 如何获取tableview中当前选中的cell

    当我们点击某个cell时,会执行下面这个方法,方法中调用另一方法执行具体操作: - (void)tableView:(UITableView *)tableView didSelectRowAtInd ...

  7. slf4j+log4j配置

    下载三个包: 三个包分别是:log4j的API包,slf4j的API包,slf4j对log4j的适配包. 选择使用slf4j一个重要的原因是支持占位符{},不用频繁操作字符串对象. 实现代码如下: i ...

  8. YUM软件管理

    YUM是一个RPM的前端程序,主要目的是设计用来解决RPM的依赖关系的问题,而不用手动安装所依赖的所有软件.它使用仓库保存管理RPM软件包,仓库的配置文件保存在/etc/yum.repos.d/目录下 ...

  9. 使用BootStrap制作用户登录UI

    先看看劳动成果 布局 左右各一半(col-md-6) 左侧登录框占左侧一半的10/12 右侧是登录系统的注意事项 使用到的BootStrap元素 well 输入框组(input-group) 按钮(b ...

  10. WinRt BottomAppBar

    BottomAppBarDemo.xaml <Page.BottomAppBar> <AppBar> <StackPanel Orientation="Hori ...