自己写算法---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 二叉树的非递归遍历 二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就 是递归定 ...
随机推荐
- [WinForm]平均切割图片AvgCutImage
昨天晚上下班前有朋友问我有的人的QQ空间相册的那种多个图片拼接成一张完整的图片的是怎么做到的比如像这样效果: 嘛,反正我是1000%不会使用这样封面来做网络相册的封面,因为用户体验实在是太差了.完全不 ...
- 百度地图API 学习网站
官方示例:http://developer.baidu.com/map/jsdemo.htm#a1_2 (注意:此网页可能由于浏览器问题,源代码编辑器中的代码不能看到.火狐亲测有效) http://d ...
- 翻译「C++ Rvalue References Explained」C++右值引用详解 Part4:强制Move语义
本文为第四部分,目录请参阅概述部分:http://www.cnblogs.com/harrywong/p/4220233.html. 强制Move语义 众所周知,正如C++标准的第一修正案所陈述:“委 ...
- Kafka Quick Start
1.Download > tar -xzf kafka_2.11-0.10.0.0.tgz> cd kafka_2.11-0.10.0.0 2.启动zookeeper服务 Kafka使用的 ...
- -(UIView *)hitTest:(CGPoint)point withEvent:(UIEvent *)event
在有全屏侧滑的情况下,页面上有个slider需要左右滑动的时候,经常在滑动slider的时候页面也跟着滑动 解决办法一:关闭当前页面的全屏侧滑,开启系统侧滑 self ...
- table extraction
http://yz.mit.edu/papers/webtables-vldb08.pdf http://www.vldb.org/pvldb/vol4/p528-venetis.pdf Alon H ...
- (转)各种排序算法的分析及java实现
转自:http://www.cnblogs.com/liuling/p/2013-7-24-01.html 排序一直以来都是让我很头疼的事,以前上<数据结构>打酱油去了,整个学期下来才勉强 ...
- aspxgridView,Repeater增加自动序号列
第一种方式,直接在Aspx页面GridView模板列中.这种的缺点是到第二页分页时又重新开始了. <asp:TemplateField HeaderText="序号" Ins ...
- Java Base64 加密解密
使用JDK的类 BASE64Decoder BASE64Encoder package test; import sun.misc.BASE64Decoder; import sun.misc.BA ...
- 获取本地ip地址
#import <ifaddrs.h> #import <arpa/inet.h> // Get IP Address - (NSString *)getIPAddress { ...