自己写算法---java的堆的非递归遍历
- import java.io.*;
- import java.util.*;
- public class Main
- {
- public static void main(String args[])
- {
- Scanner cin = new Scanner(System.in);
- //ArrayList<String> list = new ArrayList<String>();
- //Scanner scan = new Scanner(System.in); //获取键盘输入的另一种格式
- int[] list={}; //如果只是在外部申明而没有静态初始化的话,while里面的数组将变为局部变量,从而在循环外部无法获取
- while(cin.hasNextInt())
- {
- int s=cin.nextInt();
- list = new int[s]; // 声明数组长度
- for(int i=0;i<list.length;++i){ //给数组赋值
- list[i] = cin.nextInt();
- }
- break;
- }
- //以下是具体算法,堆排序(非递归)
- //1.初始化堆
- list = confirm(list,list.length);
- //2.开始堆排序
- for(int j=list.length-1;j>=0;--j){
- int tmp=list[j];
- list[j]=list[0];
- list[0]=tmp;
- list = confirm(list,j); //最后一个不需要比较
- }
- for(int i=0;i<list.length;++i){
- System.out.println(list[i]);
- }
- }
- //初始化堆的方法
- public static int[] init(int[] list,int cycnum){
- for(int i=cycnum-1;i>=0;--i){
- if(2*i+1>cycnum-1){
- continue; //到最底层叶子节点时,跳出循环
- }
- int max=0;//记录左右节点较大的一个,值的大小
- int key=0;//记录key的大小
- if(2*i+2>cycnum-1){
- max=list[2*i+1];
- key=2*i+1;
- }else{
- max=list[2*i+1]>list[2*i+2] ? list[2*i+1]:list[2*i+2];
- key=list[2*i+1]>list[2*i+2] ? 2*i+1 : 2*i+2;
- }
- if(max>list[i]){
- list[key]=list[i];
- list[i]=max;
- }
- }
- return list;
- }
- public static int[] confirm(int[] list,int cycnum){
- for(int j=0;j<=cycnum;++j){
- list = init(list,cycnum); //调用堆的方法,只是调用for循环,没有递归
- if( list == init(list,cycnum)){
- break;
- }
- }
- return list;
- }
- }
自己写算法---java的堆的非递归遍历的更多相关文章
- 非递归遍历二叉树Java版的实现代码(没写层次遍历)
直接上代码呵呵,里面有注解 package www.com.leetcode.specificProblem; import java.util.ArrayList; import java.util ...
- 数据结构二叉树的递归与非递归遍历之java,javascript,php实现可编译(1)java
前一段时间,学习数据结构的各种算法,概念不难理解,只是被C++的指针给弄的犯糊涂,于是用java,web,javascript,分别去实现数据结构的各种算法. 二叉树的遍历,本分享只是以二叉树中的先序 ...
- 数据结构之二叉树篇卷三 -- 二叉树非递归遍历(With Java)
Nonrecursive Traversal of Binary Tree First I wanna talk about why we should <code>Stack</c ...
- 二叉树3种递归和非递归遍历(Java)
import java.util.Stack; //二叉树3种递归和非递归遍历(Java) public class Traverse { /******************一二进制树的定义*** ...
- 非递归遍历N-ary树Java实现
2019-03-25 14:10:51 非递归遍历二叉树的Java版本实现之前已经进行了总结,这次做的是非递归遍历多叉树的Java版本实现. 在非递归遍历二叉树的问题中我个人比较推荐的是使用双whil ...
- JAVA递归、非递归遍历二叉树(转)
原文链接: JAVA递归.非递归遍历二叉树 import java.util.Stack; import java.util.HashMap; public class BinTree { priva ...
- Java实现二叉树的创建、递归/非递归遍历
近期复习数据结构中的二叉树的相关问题,在这里整理一下 这里包含: 1.二叉树的先序创建 2.二叉树的递归先序遍历 3.二叉树的非递归先序遍历 4.二叉树的递归中序遍历 5.二叉树的非递归中序遍历 6. ...
- 非递归遍历二叉树Java实现
2018-10-03 20:16:53 非递归遍历二叉树是使用堆栈来进行保存,个人推荐使用双while结构,完全按照遍历顺序来进行堆栈的操作,当然在前序和后序的遍历过程中还有其他的压栈流程. 一.Bi ...
- ZT 二叉树的非递归遍历
ZT 二叉树的非递归遍历 二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就 是递归定 ...
随机推荐
- Git使用手册:HTTPS和SSH方式的区别和使用
在管理Git项目上,很多时候都是直接使用https url克隆到本地,当然也有有些人使用SSH url克隆到本地.这两种方式的主要区别在于:使用https url克隆对初学者来说会比较方便,复制htt ...
- 【转载】Myeclipse如何自动创建hibernate
Myeclipse如何自动创建hibernate:http://jingyan.baidu.com/article/456c463b99f4370a583144a8.html An internal ...
- Mysql-5.7.10启动失败 。
Mysql-5.7.10在免安装后启动服务失败. 查看日志得到如下: 2016-02-19T03:41:05.557095Z 0 [Warning] TIMESTAMP with implicit D ...
- javascript设计模式-桥接模式
在系统中,某些类由于自身逻辑,具有两个或两个以上维度的变化,如何使得该类型可以沿多个方向变化,但又不引入额外的复杂度,这就是桥接模式要解决的问题. 定义:桥接模式(Bridge),将抽象部分与它的实现 ...
- Yii cookie 的使用方法
设置cookie: //首先新建cookie$cookie = new CHttpCookie('mycookie', 'this is my cookie');//定义cookie的有效期$cook ...
- 如何获取tableview中当前选中的cell
当我们点击某个cell时,会执行下面这个方法,方法中调用另一方法执行具体操作: - (void)tableView:(UITableView *)tableView didSelectRowAtInd ...
- slf4j+log4j配置
下载三个包: 三个包分别是:log4j的API包,slf4j的API包,slf4j对log4j的适配包. 选择使用slf4j一个重要的原因是支持占位符{},不用频繁操作字符串对象. 实现代码如下: i ...
- YUM软件管理
YUM是一个RPM的前端程序,主要目的是设计用来解决RPM的依赖关系的问题,而不用手动安装所依赖的所有软件.它使用仓库保存管理RPM软件包,仓库的配置文件保存在/etc/yum.repos.d/目录下 ...
- 使用BootStrap制作用户登录UI
先看看劳动成果 布局 左右各一半(col-md-6) 左侧登录框占左侧一半的10/12 右侧是登录系统的注意事项 使用到的BootStrap元素 well 输入框组(input-group) 按钮(b ...
- WinRt BottomAppBar
BottomAppBarDemo.xaml <Page.BottomAppBar> <AppBar> <StackPanel Orientation="Hori ...