合并排序 java
java 实现合并排序
package How; import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.lang.reflect.Array;
import java.util.Random; import org.omg.PortableInterceptor.DISCARDING; public class bin_1
{
public static void main(String[] args)
{
try
{
mergesortSort myMergesortSort=new mergesortSort();
myMergesortSort.display();
} catch (IOException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class mergesortSort
{
int size=6;
int []array;
int []temp;
BufferedWriter fout_1;
BufferedWriter fout_2;
//准备数据
public mergesortSort() throws IOException
{
fout_1=new BufferedWriter(new FileWriter("noOrder.txt"));
fout_2=new BufferedWriter(new FileWriter("inOrder.txt"));
Random random=new Random();
array=new int[size];
this.temp=new int[size];
for(int i=0; i<size; i++)
{
array[i]=random.nextInt(100);
fout_1.write(array[i]+"");
fout_1.newLine();
}
fout_1.flush();
mergesort( 0, size-1);
}
//方便调用
public mergesortSort(int []array, int l, int r ) throws IOException
{
fout_1=new BufferedWriter(new FileWriter("noOrder.txt"));
fout_2=new BufferedWriter(new FileWriter("inOrder.txt"));
this.array=array;
this.temp=new int[l-r+1];
mergesort( l, r);
}
public mergesortSort(int []array) throws IOException
{
fout_1=new BufferedWriter(new FileWriter("noOrder.txt"));
fout_2=new BufferedWriter(new FileWriter("inOrder.txt"));
this.array=array;
this.temp=new int[array.length];
mergesort( 0, array.length-1);
}
public void mergesort(int l, int r)
{
if(l<r)
{
int m=(l+r)/2;
mergesort( l, m);
mergesort( m+1, r);
merge( l, m, r);
}
}
public void merge(int l, int m, int r)
{
int p=l;
int q=m+1;
int k=0;
System.out.println("p="+p);
System.out.println("q="+q);
while(p<=m&&r>=q)
{
if(array[p]<=array[q]) //谁小谁先进
{
temp[k++]=array[p];
p++;
}
else
{
temp[k++]=array[q];
q++;
}
System.out.println(""+array[k]);
}
if(p<=m)
{
for(int i=p; i<=m; i++)
{
temp[k++]=array[i];
}
}
else
{
for(int i=q; i<=r; i++)
{
temp[k++]=array[i];
}
}
//复制 这里比较容易出错
for(int i=0; i<k; i++)
{
array[l++]=temp[i];
}
}
public void display() throws IOException
{ for(int i=0; i<array.length; i++)
{
fout_2.write(""+array[i]);
fout_2.newLine();
}
fout_2.flush();
}
}
运行结果
合并排序 java的更多相关文章
- Java与算法之(11) - 合并排序
天下事,合久必分,分久必合.合并排序的基本思想正是先分再合. 例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序.合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于 ...
- 算法笔记_014:合并排序(Java)
1 问题描述 给定一组数据,使用合并排序得到这组数据的非降序排列. 2 解决方案 2.1 合并排序原理简介 引用自百度百科: 合并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Div ...
- java 合并排序算法、冒泡排序算法、选择排序算法、插入排序算法、快速排序算法的描述
算法是在有限步骤内求解某一问题所使用的一组定义明确的规则.通俗点说,就是计算机解题的过程.在这个过程中,无论是形成解题思路还是编写程序,都是在实施某种算法.前者是推理实现的算法,后者是操作实现的算法. ...
- Java实现合并排序
1 问题描述 给定一组数据,使用合并排序得到这组数据的非降序排列. 2 解决方案 2.1 合并排序原理简介 引用自百度百科: 合并排序是建立在归并操作上的一种有效的排序算法.该算法是采用分治法(Div ...
- lintcode:合并排序数组
题目: 合并排序数组 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A=[1,2,3,4],B=[2,4,5,6],返回 [1,2,2,3,4,4,5,6] 挑战 你能否优化你的算法,如果 ...
- 希尔排序及希尔排序java代码
原文链接:http://www.orlion.ga/193/ 由上图可看到希尔排序先约定一个间隔(图中是4),然后对0.4.8这个三个位置的数据进行插入排序,然后向右移一位对位置1.5.9进行插入排序 ...
- 用javascript比较快速排序和合并排序的优劣
<script> //用来调用排列方法的类 function arr_sort(arr){ var startTime,endTime; var priv_arr = new Array; ...
- julia文件合并排序.jl
julia文件合并排序.jl """ julia文件合并排序.jl http://bbs.bathome.net/thread-39841-1-1.html 2016年3 ...
- lintcode:合并排序数组 II
题目: 合并排序数组 II 合并两个排序的整数数组A和B变成一个新的数组. 样例 给出A = [1, 2, 3, empty, empty] B = [4,5] 合并之后A将变成[1,2,3,4,5] ...
随机推荐
- python(8):面向对象编程
有三种程序类型: (1)面向过程:按照一定的逻辑顺序,一步步垒代码 (2)面向函数:对用常用的计算,建立函数避免重复 (3)面向对象: 函数的集合,对函数进行分类和封装 (一) 抽象 抽象: 哈巴狗, ...
- python之路第二天
为何要有操作系统 为了让程序员更轻松的完成命令电脑工作而存在的,控制硬件,服务于软件. 操作系统的位置 操作系统位于软件和硬件之间.操作系统由内核(运行于内核态,控制硬件)和系统调用(运行于用户态,为 ...
- SpringMvc框架MockMvc单元测试注解及其原理分析
来源:https://www.yoodb.com/ 首先简单介绍一下Spring,它是一个轻量级开源框架,简单的来说,Spring是一个分层的JavaSE/EEfull-stack(一站式) 轻量级开 ...
- springboot+mybatis+springMVC基础框架搭建
项目结构概览 pom.xml <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http: ...
- 步步为营-74-Request,Response和server的其他成员
Request 1 Request.UrlReferrer 获取请求的来源 2 Request.UserHostAddress 获取访问者的IP地址 3 Request.Cookies 获取浏览器发送 ...
- Ajax爬虫必用到的字典转换器
1.使用情景 在我们Ajax爬虫时需要用到以下这样的数据的时候我们会一个一个地复制粘贴,这样会很麻烦 def dictionary_converter(key_value): '''主要用于爬虫时复制 ...
- 腾讯云Ubuntu安装可视化桌面
1.安装图形界面 sudo apt-get update 更新 1).sudo apt-get install xinit 2).sudo apt-get install gdm ( 登陆窗口,用于 ...
- 开始写博客,学习Linq(1)
摘自<linq实战>原文: 软件很简单.它可以归结为两件事情:代码和数据. 开发软件却并非那么简单,其中很重要的一项任务就是编写处理数据的代码. 无论选择了哪种语言,在程序开发得某个时候你 ...
- java数组知识点总结
数组是一个用来存储同一个数据类型多个元素的一个容器(数组长度是固定的,数组中存储的元素的数据类型要求一致) 1.格式: 格式1: 数据类型[] 数组名 = new 数据类型[数组长度]; 格式2: 数 ...
- 【Android】Android 多个APK数据共享
Android给每个APK进程分配一个单独的用户空间,其manifest中的userid就是对应一个Linux用户(Android 系统是基于Linux)的.所以不同APK(用户)间互相访问数据默认是 ...