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( ...
随机推荐
- HttpWebRequest提交(Post)数据
protected void Page_Load(object sender, EventArgs e) { string sql = "select top 1 * from [user] ...
- 提高你的数据库编程效率:Microsoft CLR Via Sql Server
你还在为数据库编程而抓狂吗?那些恶心的脚本拼接,低效的脚本调试的日子将会与我们越来越远啦.现在我们能用支持.NET的语言来开发数据库中的对象,如:存储过程,函数,触发器,集合函数已及复杂的类型.看到这 ...
- 100722A
这道题抄了答案: 思路:旋转,其实只用旋转四次,因为在换行的过程中旋转其实是没有意义的,因为行列只不过转了个角度.然后主要的是行列的交换,这里我很头疼,写了个盲目搜索,当然wa掉了 问了问某位同志,是 ...
- ELK系统中kibana展示数据的时区问题
在采用ELK记录系统日志时,日志存入elasticsearch时,一般是以本地时区存入(如北京东8区) 在elasticsearch中直接查询时也没有任何问题,但是kibana在做日志展示时,对日志时 ...
- 详解Mac配置虚拟环境Virtualenv
virtualenv 可以用来建立一个专属于项目的python环境,保持一个干净的环境.只需要通过命令创建一个虚拟环境,不用的时候通过命令退出,删除. 下面介绍一下安装方法: 安装 virtualen ...
- 【HDU 5833】Zhu and 772002(异或方程组高斯消元)
300个最大质因数小于2000的数,选若干个它们的乘积为完全平方数有多少种方案. 合法方案的每个数的质因数的个数的奇偶值异或起来为0. 比如12=2^2*3,对应的奇偶值为01(2的个数是偶数为0,3 ...
- Linux基础2
命令格式命令的类型:1.内部命令 linux系统使用的shell提供.2.外部命令 安装第三方软件才会. type 命令名 查命令的类型 | 把前边命令的输出作为后边命令的输入 管道 grep 对数据 ...
- IE中使用jquery的fadeIn()失效的问题
在自己写的一个轮播组件中遇到一个问题,使用jquery的fadeIn动画时,在IE11中表现不正常,没有渐入的效果. 1.HTML结构 <div class="mainpage-sli ...
- Leetcode 368. Largest Divisible Subset
Given a set of distinct positive integers, find the largest subset such that every pair (Si, Sj) of ...
- SQL Server判断语句(IF ELSE/CASE WHEN )
1.IF ELSE 不能用在SELECT中,只能是块,比如: IF ... BEGIN ... END ELSE (注意这里没有ELSE IF,要实现只能在下面的块中用IF判断) BEGIN ... ...