Java排序算法——归并排序


import java.util.Arrays; //=================================================
// File Name : MergeSort
//------------------------------------------------------------------------------
// Author : Common //类名:Arrays_Merge
//属性:
//方法:
class Arrays_Merge{
private int[] arrays;
private int curNum;
//int[] workSpace; public Arrays_Merge(int max) { //建立一个max长度的空数组
super();
arrays = new int[max];
curNum = 0;
} public void insert(int value){ //往空的数组里面增加元素
arrays[curNum] = value;
curNum++;
} public void display(){ //显示数组
System.out.println(Arrays.toString(arrays));
} public void mergeSort(){
int[] arrays = new int[curNum];
recMergeSort(arrays, 0, curNum-1);
} public void recMergeSort(int[] workSpace,int lowerBound,int upperBound){
if(lowerBound == upperBound)
return;
else
{
int mid = (lowerBound+upperBound)/2;
recMergeSort(workSpace,lowerBound,mid);
recMergeSort(workSpace,mid+1,upperBound);
merge(workSpace,lowerBound,mid+1,upperBound);
System.out.println("mid="+mid);
}
} public void merge(int[] workSpace,int lowPtr,int highPtr,int upperBound){
int j=0;
int lowerBound = lowPtr;
int mid = highPtr-1;
int n = upperBound-lowerBound+1; while(lowPtr<=mid && highPtr<=upperBound){
if(arrays[lowPtr]<arrays[highPtr]){ //如果后面的小,就先放进新的数组中
workSpace[j++] = arrays[lowPtr++]; //如果运行第一行,就运行下面的第二个
System.out.println("1lowPtr="+(lowPtr-1)+" "+workSpace[j-1]);
}else{
workSpace[j++] = arrays[highPtr++]; //如果运行第二行,就运行下面的第一个
System.out.println("1highPtr="+(highPtr-1)+" "+(j-1)+"="+workSpace[j-1]);
}
} while(lowPtr<=mid){ //以下两个只可能运行一个
workSpace[j++] = arrays[lowPtr++];
System.out.println("lowPtr="+(lowPtr-1)+" "+workSpace[j-1]);
} while(highPtr<=upperBound){
workSpace[j++] = arrays[highPtr++];
System.out.println("highPtr="+(highPtr-1)+" "+workSpace[j-1]);
} for(j=0;j<n;j++){
arrays[lowerBound+j] = workSpace[j];
} } } //主类
//Function : MergeSort
public class MergeSort { public static void main(String[] args) {
// TODO 自动生成的方法存根
int maxSize=10;
Arrays_Merge arr;
arr = new Arrays_Merge(maxSize);
arr.insert(9);
arr.insert(8);
arr.insert(7);
arr.insert(6);
arr.insert(5);
arr.insert(4);
arr.insert(3);
arr.insert(2);
arr.insert(1);
arr.display();
arr.mergeSort();
arr.display();
} }
Java排序算法——归并排序的更多相关文章
- java排序算法-归并排序
public class MergeSort { private static void mergeSortTest() { int[] in = { 2, 5, 3, 8, 6, 7, 1, 4, ...
- java排序算法(九):归并排序
java排序算法(九):归并排序
- java排序算法(一):概述
java排序算法(一)概述 排序是程序开发中一种非常常见的操作,对一组任意的数据元素(活记录)经过排序操作后,就可以把它们变成一组按关键字排序的一组有序序列 对一个排序的算法来说,一般从下面三个方面来 ...
- java排序算法(四):冒泡排序
java排序算法(四):冒泡排序 冒泡排序是计算机的一种排序方法,它的时间复杂度是o(n^2),虽然不及堆排序.快速排序o(nlogn,底数为2).但是有两个优点 1.编程复杂度很低.很容易写出代码 ...
- Java排序算法(三)
Java排序算法(三) 三.Java排序算法总结 从这三组时间复杂度对比中,可以看出,堆排序和归并排序是不管在什么情况下发挥稳定的,快速排序好的时候表现如天才,坏情况下比较差强人意,甚至在等待排序个数 ...
- Java排序算法(二)
java排序算法(二) 二.改进排序算法 2.1希尔排序 定义:希尔排序(ShellSort)是插入排序的一种.也称缩小增量排序,是直接插入排序算法的一种更高效的改进版本.希尔排序是非稳定排序算法. ...
- Java排序算法(一)
Java排序算法(一) 排序的基本概念和分类 1.1排序的定义 在<大话数据结构>中,排序定义为,假设含有n个记录的序列为{r1,r2,...,rn},其相应的关键字{k1,k2,..., ...
- Java排序之归并排序
Java排序之归并排序 1. 简介 归并排序的算法是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个有序表,则成为二路合并.对于一个原始的待排序数列,往往可以通过分割的方法来归结为多路合并 ...
- java排序算法之冒泡排序和快速排序
总结一下Java排序算法,以便记忆. 各类排序的时间复杂度: 排序方法 时间复杂度(平均) 时间复杂度(最坏) 时间复杂度(最好) 空间复杂度 稳定性 复杂性 直接插入排序 O(n2)O(n2) O( ...
随机推荐
- 转 ext文件系统及块组
一.文件系统概述 1. 引导块 前文中介绍过磁盘需要进行分区和格式化,才能创建文件系统并使用,那么一块已经被各式化了分区其结构是什么样的呢?分区是按照柱面来划分的,而柱面包含的是磁道,磁道上包含的是扇 ...
- Android其它新控件 (转)
原文出处:http://blog.csdn.net/lavor_zl/article/details/51312715 Android其它新控件是指非Android大版本更新时提出的新控件,也非谷歌I ...
- 从库查看状态的时候显示“ Last_Error”
mysql> show slave status\G;*************************** 1. row *************************** ...
- [转]JS中对象与字符串的互相转换
原文地址:http://www.cnblogs.com/luminji/p/3617160.html 在使用 JSON2.JS 文件的 JSON.parse(data) 方法时候,碰到了问题: thr ...
- flex布局无法自动适应的bug以及实现textarea根据内容自适应
-webkit-box布局无法自动适应高度的bug css3的新属性display:-webkit-box带来了前端开发自动适应布局的春天 ,但是我发现这个布局有个问题, 而且这个问题我无法解决: 描 ...
- css 去除 a,checkbox 框 出现虚线
在开发过程中遇到checkbox框,第一次遇到还以为是系统自带的是这样 后来发现不是那样, 我们可以在使用css 去掉出现的虚线框,以下是我的解决方案代码: /* checkbox 去掉虚框*/:fo ...
- hive 函数 Cube
最近在优化一个报表系统.leader 提示我可以用cube函数.在此记录一下使用: 1) cube 简称数据魔方. 可以实现hive多个任意维度的查询. cube(a,b,c) 首先会对(a,b,c ...
- Linux安装后的基本配置
1.换源 http://mirrors.zju.edu.cn http://mirrors.aliyun.com http://mirrors.ustc.edu.cn ubuntu替换/etc/apt ...
- 什么是ECMA标准
是1961年成立的旨在建立统一的电脑操作格式标准,包括程序语言和输入输出的组织. 官方ECMA标准列表: http://www.ecma-international.org/publications/ ...
- 利用iconv进行文件编码批量原地转换
将当前目录及其所有子目录中的以 java 为后缀的文件,从 GB18030 转换为 UTF-8: find . -name "*.java" -exec sh -c " ...