java归并排序
代码如下:
public class MergeSort {
	public static void mergeSort(DataWrap [] data)
	{
		sort(data , 0 , data.length-1);
	}
	/**
	 * 将索引从left到right范围的数组元素进行归并排序
	 * @param data 待排序的数组
	 * @param left 待排数组的元素的第一个索引
	 * @param right 待排数组的元素的最后一个索引
	 */
	private static void sort(DataWrap[] data, int
			left, int right) {
		if(left < right)
		{
			//找出中间索引
			int center = (left + right)/2;
			//对左边数组进行递归
		    sort(data , left , center);
		    //对右边的数组进行递归
		    sort(data , center+1, right);
		    //合并
		    merge(data , left , center , right);
		}
	}
	/**
	 * 讲两个数组进行合并,合并之前两个数组已经有序,归并后依然有序
	 * @param data 数组对象
	 * @param left 左数组第一个元素的索引
	 * @param center 左数组的最后一个元素的索引 ,center+1右数组的第一个元素的索引
	 * @param right  右数组的最后一个元素的索引
	 */
	private static void merge(DataWrap[] data, int left, int center, int right) {
		DataWrap [] tmpArry = new DataWrap [data.length];
		int mid = center +1;
		//third记录中间数组的索引
		int third = left;
		int tmp = left;
		while(left <= center && mid <=right)
		{
			//从两个数组中取出小的数放入中间数组
			if(data[left].compareTo(data[mid]) <=0)
			{
				tmpArry[third++] = data[left++];
			}
			else
			{
				tmpArry[third++] = data[mid++];
			}
		}
		//剩余部分依次放入中间数组
		while(mid <= right)
		{
			tmpArry[third++] = data[mid++];
		}
		while(left <= center)
		{
			tmpArry[third++] = data[left++];
		}
		//将中间数组的内容复制拷贝到原数组
		//(原left-right范围内的内容被复制回原数组)
		while(tmp <= right)
		{
			data[tmp] = tmpArry[tmp++];
		}
	}
	public static void main(String[] args) {
		DataWrap[] data = {
				new DataWrap(21, ""),
				new DataWrap(30, ""),
				new DataWrap(49, ""),
				new DataWrap(30, ""),
				new DataWrap(16, ""),
				new DataWrap(9, ""),
				new DataWrap(-16, "")
		};
		System.out.println("排序之前:\n" + java.util.Arrays.toString(data));
		mergeSort(data);
		System.out.println("排序之后:\n" + java.util.Arrays.toString(data));
	}
}
java归并排序的更多相关文章
- java归并排序,单线程vs多线程
		一.什么是归并排序 归并排序又称合并排序,它是成功应用分治技术的一个完美例子.对于一个需要排序的数组A[0..n-1],归并排序把它一分为二:A[0..n/2-1]和A[n/2..n-1],并对每个子 ... 
- java归并排序详解
		归并排序 /** * 归并排序 * 简介:将两个(或两个以上)有序表合并成一个新的有序表 即把待排序序列分为若干个子序列,每个子序列是有序的.然后再把有序子序列合并为整体有序序列 * 时间 ... 
- Java归并排序的递归与非递归实现
		该命题已有无数解释,备份修改后的代码 平均时间复杂度: O(NLogN) 以2为底 最好情况时间复杂度: O(NLogN) 最差情况时间复杂度: O(NLogN) 所需要额外空间: 递归:O(N + ... 
- 23. Merge K Sorted Lists (Java, 归并排序的思路)
		题目:Merge k sorted linked lists and return it as one sorted list. Analyze and describe its complexity ... 
- 8 Java 归并排序(MergerSort)
		图片素材与文字描述来自:尚硅谷-韩顺平数据结构与算法. 1.基本思想 归并排序是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题分(divi ... 
- Java 归并排序
		package cookie; public class MergeSort { void mergeSort(int[] a, int[] temp, int left, int right) { ... 
- Hark的数据结构与算法练习之归并排序
		算法说明: 归并排序的思路就是分而治之,将数组中的数字递归折半进行排序. 递归到最底层就只剩下有两个数字进行比较,再从底层往下进行排序合并.最终得出结果. 同样,语言描述可能对于不知道这个算法的人来说 ... 
- Java数据结构和算法 - 递归
		三角数字 Q: 什么是三角数字? A: 据说一群在毕达哥拉斯领导下工作的古希腊的数学家,发现了在数学序列1,3,6,10,15,21,……中有一种奇特的联系.这个数列中的第N项是由第N-1项加N得到的 ... 
- 20172328 2018-2019《Java软件结构与数据结构》第五周学习总结
		20172328 2018-2019<Java软件结构与数据结构>第五周学习总结 概述 Generalization 本周学习了第九章:排序与查找,主要包括线性查找和二分查找算法和几种排序 ... 
随机推荐
- C++中的继承与虚函数各种概念
			虚继承与一般继承 虚继承和一般的继承不同,一般的继承,在目前大多数的C++编译器实现的对象模型中,派生类对象会直接包含基类对象的字段.而虚继承的情况,派生类对象不会直接包含基类对象的字段,而是通过一个 ... 
- P1656 炸铁路
			P1656 炸铁路 81通过 286提交 题目提供者kkksc03 标签图论搜索/枚举洛谷原创 难度普及+/提高 提交该题 讨论 题解 记录 最新讨论 暂时没有讨论 题目描述 因为某国被某红色政权残酷 ... 
- 【剑指offer】斐波那契序列与跳台阶
			转载请注明出处:http://blog.csdn.net/ns_code/article/details/25337983 剑指offer上的第9题,简单题,在九度OJ上測试通过. 主要注意下面几点: ... 
- ZOJ 1860:Dog & Gopher
			Dog & Gopher Time Limit: 2 Seconds Memory Limit: 65536 KB A large field has a dog and a gop ... 
- bzoj2662 [BeiJing wc2012]冻结 ——分层图
			题目:https://www.lydsy.com/JudgeOnline/problem.php?id=2662 分层图: 我也不知道我写的是不是 bfs (dijkstra?). 代码如下: #in ... 
- pandas删除满足特定列信息的行记录
			#!/usr/bin/python import pandas as pd df = pd.read_excel('c:\data\zichan.xlsx') df_sn = pd.read_exce ... 
- git-更改本地和远程分支的名称
			git branch -m old_branch new_branch # Rename branch locally git push origin :old_branch # Delete the ... 
- 客户端JavaScript Ajax
			创建: 2017/10/21 完成: 2017/10/23 [TODO] 对Ajax收发各类型数据制作模板 补充跨域通信(cross origin) p457 HTTP通信 HTTP 超文本 ... 
- Django day26 初识认证组件
			一:什么是认证组件 只有认证通过的用户才能访问指定的url地址,比如:查询课程信息,需要登录之后才能查看,没有登录,就不能查看,这时候需要用到认证组件 二:认证组件源码分析 
- linux tmux基本操作
			1. 安装工具 Centos : yum install tmux 2. 基本操作 新建会话:tmux new -s session-name 查看会话:tmux ls 进入会话:tmux a -t ... 
