自己写算法---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 二叉树的非递归遍历 二叉树的非递归遍历 二叉树是一种非常重要的数据结构,很多其它数据结构都是基于二叉树的基础演变而来的.对于二叉树,有前序.中序以及后序三种遍历方法.因为树的定义本身就 是递归定 ...
随机推荐
- jmeter随笔(3)-从csv中获取带引号的数据详情
最近在工作中,对jmeter实践的点滴的记录这里分享,不一定正确,仅供参考和讨论,有想法的欢迎留言.谈论. 1技巧1:从csv中获取带引号的数据详情 背景:我们从csv中获取数据,在jmeter中使用 ...
- Orchard官方文档翻译(六) 建立你的第一个Orchartd站点
让我们开始 该主题内容已在Orchard1.8Release版本下测试通过. 这里通过向导式的教程来告诉大家Orchard的功能如何使用.如果你是第一次使用Orchard,该文档就是为你而准备的! O ...
- 【drp 10】JSP页面中model1和model2的区别
一.基本概念 1.1,model1 model1的开发模式是:jsp+javabean的模式,它的核心是JSP页面,在这个页面中,jsp页面负责整合页面和javabean(业务逻辑),而且渲染页面.它 ...
- C/C++中几种操作位的方法
参考How do you set, clear and toggle a single bit in C? c/c++中对二进制位的操作包括设置某位为1.清除某位(置为0).开关某位(toggling ...
- JS常用的设计模式(13)——组合模式
组合模式又叫部分-整体模式,它将所有对象组合成树形结构.使得用户只需要操作最上层的接口,就可以对所有成员做相同的操作. 一个再好不过的例子就是jquery对象,大家都知道1个jquery对象其实是一组 ...
- CSS3 图片悬浮缩放效果
<html> <head> <meta http-equiv="Content-Type" content="text/html; char ...
- C++ inline(内联什么时候使用)
(1)什么是内联函数?内联函数是指那些定义在类体内的成员函数,即该函数的函数体放在类体内. (2)为什么要引入内联函数?当然,引入内联函数的主要目的是:解决程序中函数调用的效率问题.另外,前面我们讲到 ...
- Wpf实现图片自动轮播自定义控件
近来,公司项目需要,需要写一个自定义控件,然后就有下面的控件产生.样式没有定义好,基本功能已经实现.1.创建为自定义控件的XAML页面.下面为后台代码 using System; using Syst ...
- u-boot、kernel和filesystem 执行过程分析
标题: Uboot -kerne-root 启动流程 内容: ※uboot启动流程 ※Kernel启动流程 ※Root启动流程 ※构建根文件系统 /************************** ...
- 软件工程 speedsnail 冲刺7
2015-5-11 完成任务:蜗牛移动的一部分: 遇到问题: 问题1 速度,坐标,角度: 速度分级别设置: 坐标记录功能,方便障碍物检测: 暂定初始45度角: 解决1 未解决上述问题 明日任务: 蜗牛 ...