Java实现非递归归并排序
public class nonRecursiveMergeSort {
public static void main(String[] args) {
int[] list = {8,4,3,6,9};
MergeSort(list);
for(int num:list)
System.out.print(num);
}
public static void MergeSort(int[] list){
int len = 1;//2-路排序的实现
int[] temp = new int[list.length];
while(len<list.length){
MergePass(list, temp, list.length, len);
len = len*2;
if(len>=list.length){
for(int i =0;i<list.length;i++)
list[i] = temp[i];
}
else{
MergePass(temp, list, list.length, len);
len = len*2;
}
}
}
//两个数组归并为一个数组
public static void Merge(int[] list, int[] temp, int i, int m, int n){
int k = i, j = m+1;
for(;i<=m&&j<=n;k++){
if(list[i]<=list[j])
temp[k] = list[i++];
else{
temp[k] = list[j++];
}
}
while(i<=m)
temp[k++] = list[i++];
while(j<=n)
temp[k++] = list[j++];
}
public static void MergePass(int[] list, int[] temp, int n, int len){
int i =0;
while(i<=n-len*2){//处理两个长度相同子表
Merge(list, temp, i, i+len-1, i+len*2-1);
i = i+len*2;
}
if(i<n-len){//处理两个长度不同的子表
Merge(list, temp, i, i+len-1, n-1);
}
else{//不能构成两个子表
for(int j =i;j<n;j++){
temp[j] = list[j];
}
}
}
}
Java实现非递归归并排序的更多相关文章
- javascript实现非递归--归并排序
另一道面试题是实现归并排序,当然,本人很不喜欢递归法,因为递归一般都是没有迭代法好.所以首选都是用迭代法,但是迭代法确实是难做啊,至底而上的思想不好把握. 这是我的实现代码 /* * * 非递归版归并 ...
- Java实现非递归删除目录
最近在学C#的文件系统, 发现C#的文件系统貌似比java的东西少一点, 居然连删除目录都直接做好封装了, 想到学java的时候还要自己写递归删除, 好像没写过非递归的,就在网上查了下, 关于非递归删 ...
- 【Java】 归并排序的非递归实现
归并排序可以采用递归方法(见:归并排序),但递归方法会消耗深度位O(longn)的栈空间,使用归并排序时,应该尽量使用非递归方法.本文实现了java版的非递归归并排序. 更多:数据结构与算法合集 思路 ...
- 归并排序(非递归,Java实现)
归并排序(非递归):自底向上 public class MergeSort { /** * @param arr 待排序的数组 * @param left 本次归并的左边界 * @param mid ...
- Java归并排序的递归与非递归实现
该命题已有无数解释,备份修改后的代码 平均时间复杂度: O(NLogN) 以2为底 最好情况时间复杂度: O(NLogN) 最差情况时间复杂度: O(NLogN) 所需要额外空间: 递归:O(N + ...
- 排序算法练习--JAVA(插入、直接选择、冒泡、快速排序、非递归快速排序)
排序算法是数据结构中的经典算法知识点,也是笔试面试中经常考察的问题,平常学的不扎实笔试时候容易出洋相,回来恶补,尤其是碰到递归很可能被问到怎么用非递归实现... package sort; impor ...
- 面试之路(16)-归并排序详解(MergeSort)递归和非递归实现
归并排序的概念及定义 归并排序(Merge)是将两个(或两个以上)有序表合并成一个新的有序表,即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列. 归并排序是建立 ...
- 算法笔记_013:汉诺塔问题(Java递归法和非递归法)
目录 1 问题描述 2 解决方案 2.1 递归法 2.2 非递归法 1 问题描述 Simulate the movement of the Towers of Hanoi Puzzle; Bonus ...
- 自己写算法---java的堆的非递归遍历
import java.io.*; import java.util.*; public class Main { public static void main(String args[]) { S ...
随机推荐
- React.js学习小结
最近一段时间都在学习React.js,感觉还不错,现在把自己的一些学习笔记记录一下,留着以后学习查看. 0.React全家桶(技术栈) 1.React主体 2.WebPack:grunt.gulp自动 ...
- Java入门到精通——调错篇之Spring2.5使用AOP时报错only available on JDK 1.5 and higher
一.问题描述及原因. 在Spring2.5Aop例子中的时候会出现一个错误only available on JDK 1.5 and higher,大概意思就是需要JDK1.5甚至更高版本.但是我用的 ...
- Eclipse equinox implementation of OSGi
Bundle package org.osgi.framework; public interface Bundle extends Comparable<Bundle> { int UN ...
- JSP初学者2
<jsp:useBean id="name" class="classname" scope="page|request|session|app ...
- mongodb 3.4 学习 (二)命令
# 使用或切换数据库 use <database name> # 显示所有数据库 show dbs # 显示所有collection show collections # 显示所有user ...
- SSM整合的简单实现
整合需要的jar包和源码将在文末给出 本文参考黑马程序员视频,由于视频用的环境和我使用的环境不同,建议使用我的环境及jar包(比较新) 一 整合思路 第一步 整合dao层 mybatis和spring ...
- (五)TortoiseSVN 客户端-----安装
svn客户端类型 svn客户端需要通过网络访问svn服务端提交文件.查询文件等,可通过以下客户端类型访问svn服务端: 使用Subversion提供的客户端命令,使用方式:在命令行下输入命令操作. 使 ...
- laravel 接入蚂蚁金服SDK(以支付宝APP支付为例)开发步骤
一.创建应用及配置 首先需要到蚂蚁金服开放平台(https://docs.open.alipay.com)注册应用,获取应用id(APP_ID),并且配置应用,主要是签约应用,这个需要审核,一般2-5 ...
- startup ORA-00845: MEMORY_TARGET not supported on this system
一台虚拟机跑多个实例时,由于/dev/shm空间不够导致如下报错> startupORA-00845: MEMORY_TARGET not supported on this system解决方 ...
- zip4j之加压解压
最近看同事搞个文件打包,搞了大半天,还是有问题!嗨~~ 网上明明有现成的,偏偏要自己写! 下面是基于zip4j实现加压解决的简单工具类 package com.learcher.zip; import ...