归并排序 java语言实现

package sort;

import java.util.Random;

public class MergeSort {

	@SuppressWarnings("unused")
	public boolean initTestArray(int[] testArray) {// 初始化testArray
		if (testArray == null)
			return false;
		Random random = new Random();
		for (int i = 0; i < testArray.length; i++) {
			testArray[i] = random.nextInt(200);
		}
		return true;
	}

	public boolean printTestArray(int[] testArray) {// 打印testArray中的内容
		if (testArray == null)
			return false;
		for (int i = 0; i < testArray.length; i++) {
			System.out.print(testArray[i] + ",");
		}
		System.out.println();
		return true;
	}

	public static boolean mergeSort(int[] testArray,int left,int right){
		if(left<right){
			int mid=(left+right)/2;
			mergeSort(testArray,left,mid);
			mergeSort(testArray,mid+1,right);
			if(!merge(testArray,left,mid,right))
				return false;
			//for(int i=0;i<testArray.length;i++)
				//System.out.print(testArray[i]+",");
			//System.out.println();
			return true;
		}
		return true;
	}
	@SuppressWarnings("unused")
	public static boolean merge(int[] testArray,int left,int mid,int right){
		int i=left,j=mid+1,k=0,s=right-left+1;
		int[] testArray2=new int[s];
		if(testArray2==null){
			System.out.println("testArray2存储分配失败!");
			return false;
		}
		while(i<=mid&&j<=right)
			if (testArray[i] <= testArray[j])
				testArray2[k++]=testArray[i++];
			else
				testArray2[k++]=testArray[j++];
			while(i<=mid) testArray2[k++]=testArray[i++];
			while(j<=right) testArray2[k++]=testArray[j++];
			for(i=0;i<s;i++) {
				testArray[left+i]=testArray2[i];
				//System.out.print(testArray2[i]+",");
				}
			//System.out.println();

		return true;
	}

	public static void main(String args[]){
		int[] testArray = new int[20];
		MergeSort mergeSort=new MergeSort();
		mergeSort.initTestArray(testArray);
		System.out.println("排序前:");
		mergeSort.printTestArray(testArray);
		if(!MergeSort.mergeSort(testArray, 0, testArray.length-1)){
			System.out.println("排序出错!");
			return;
		}
		System.out.println("排序后:");
		mergeSort.printTestArray(testArray);

	}

}

版权声明:本文为博主原创文章,转载请注明出处。

时间: 2024-08-03 03:50:43

归并排序 java语言实现的相关文章

java语言概念及特点相关问题

1 .什么是计算机语言? 计算机语言:指人与计算机之间的通信,主要由一些指令组成,指令包括"数字.符号和语法等内容",程序员可以通过这些指令来指挥计算机工作. 计算机语言的种类可以分为以下三类: ①机器语言:由二进制的0和1组成的编码,不便于记忆和识别(用于计算机识别). ②汇编语言:采用了英文缩写的标识符,容易识别与记忆. ③高级语言:采用接近于人类的自然语言进行编程,进一步简化了程序编写的过程. Java是一种高级计算机语言. 2.Java语言的特点? "java程序语言

java语言编程基础

java语言基本要素 高级语言如c++.c#.java等都有一些共同性的东西:关键字.标识符. 运算符.注释.数据类型.常量和变量.语句.函数.数组.高级语言在这些要素上大同小异. Java关键字:一些有特定含义,有专门用途的字符串(keyword).Java中关键字均为小写.如do while if int等.不需要记,用多了自然会知道. 标识符 自定义的名称.如类名.变量名.方法名等.合法标识符规则:1 不可使用关键子字 2 不能以数字开头.在java中标识符可有26个英文大小写字母.数字0

Java语言

Java第一次亮相是在1994年由Sun公司技术总监JohnGage提出这个概念,96年正式推广第一个版本jdk1.0,到现在常用的有1.6和被oracle收购后发布的1.7版本. Java语言特点:相对C++语言更加通俗易懂,更没有指针,Java可以在任何一个平台操作系统上运行,程序员只需要编写程序一次就行,Java具有开源.伸缩性.扩展性.同时Java采用多线程可以让程序同步做多个任务. 语言运行方式:创建.java文件--通过javac编译文件生成.class文件在通过jvm虚拟机转换成二

对Java语言中包、修饰符、封装的一些总结

一.包(packsge)   1.包的概念 物理上是文件夹 逻辑上是有逻辑关系的集合   2.包的作用 把功能相似或相关的类或接口组织在同一个包中,方便类的查找和使用: 包可以避免名字冲突.同一个包中的类名字是不同的,不同的包中的类的名字是可以相同的,当同时调用两个不同包中相同类名的类时,应该加上包名加以区别. 包也限定了访问权限,拥有包访问权限的类才能访问某个包中的类.   3.包(package)的命名规范 在包名中,可以使用.号来区分包的级别:包名一般情况下是小写 第一级 指该项目的类型,

java语言复制数组的四种方法

JAVA语言的下面几种数组复制方法中,哪个效率最高? B.效率:System.arraycopy > clone > Arrays.copyOf > for循环 1.System.arraycopy的用法: [java] view plain copy public static void arraycopy(Object src, int srcPos, Object dest, int destPos, int length) 参数:src - 源数组.srcPos - 源数组中的起

java语言基础001

1.java程序的基本结构大体上可以分为包.类.main()主方法.标识符.关键字.语句和注释等. 2.标识符和关键字区分大小写. 3.主方法是应用程序的入口点,java程序是从该方法开始执行的,main是主方法的名称,程序员不可以更改. 4.标识符 是一个名字,用来标识类名.变量名.方法名.数组名.文件名的有效字符序列. 5.标识符的命名规则: (1)java语言的标识符由字母.数字.下划线和美元符组成,第一个字符不能为数字. 非法:7word.5fox (2)java 语言使用Unicode

《Java语言程序设计》大作业报告 九宫格游戏

    <Java语言程序设计>大作业报告     中国石油大学(北京)2015 - 2016 学年第二学期     班级:_____计算机14-1_______ 姓名:_____  许 恺_________________ 学号:______2014011329___________     题意分析 程序首先需要九个可以移动的格子,大小相等,有字符串标示,其次要可以相应鼠标和键盘方向键的控制,可以自由移动,并且与此同时记录步数,最后在满足条件时弹出对话框并显示步数以及是否打破记录,关于打破

Java语言程序设计 上机实验5 异常

Java语言程序设计 上机实验5 实验目的: 理解异常的概念,掌握Java的异常处理机制.常见异常的捕获方法.自定义异常及其抛出和捕获方法. 实验内容: 常见异常的捕获: 编写一个程序,分别生成ArrayIndexOutOfBoundsException类型和NumberFormatException类型的异常:然后改写程序,对这两种类型的异常进行捕获并合理地处理. 另外,思考并回答问题:能否0同时抛出ArrayIndexOutOfBoundsException类型和NumberFormatEx

Java语言程序设计 上机实验4 掌握声明接口、一个类实现接口的声明和使用方法

Java语言程序设计 上机实验4 实验目的: 理解接口的作用,理解接口和实现接口的类的关系,掌握声明接口.一个类实现接口的声明和使用方法:熟悉Java语言包和实用包中的常用类. 实验内容:(*)为选做 声明圆柱体类Cylinder,继承椭圆类Ellipse(实现周长Perimeter接口和面积Area接口),为圆柱体类设计较为全面的构造方法,并实现体积Volume接口,计算表面积和体积. 将Java的若干关键字(15个以上)保存在一个字符串数组中,对其按升序排列,再采用顺序查找和二分法查找,判断