java方式实现归并排序
一、基本思想
归并排序是建立在归并操作上的一种排序算法,该算法是采用分治法的一个典型应用。具体操作如下:所谓的分治就是分而治之,以一分为二的原则,先把序列平均分解成二个左右子序列,然后递归左右二个子序列进行分解操作,直到得到的子序列为一个元素时,然后两两合并子序列并排序,然后递归以上合并操作,直到合并完整个序列。归并排序的平均时间复杂度为O(nlog2n),归并排序需要开辟一个数组空间,所有归并排序空间复杂度为0(n)。归并排序是稳定的排序。
二、图解

三、代码实现
ublic class JavaSort {
public static void main(String[] args) {
int a [] =new int []{6,5,3,1,8,7,2,4};
System.out.println("排序前的数组:"+Arrays.toString(a));
mergeSort(a, 0, a.length-1);
System.out.println("排序后的数组:"+Arrays.toString(a));
}
/**
*
* @param ary 未排序的序列
* @param left 序列起始索引
* @param right 序列末尾索引
*/
public static void mergeSort(int[] ary, int left, int right) {
if(null == ary) {
return;
}
if(left < right) {
//找中间位置进行划分
int mid = (left+right)/2;
//对左子序列进行递归分解
mergeSort(ary, left, mid);
//对右子序列进行递归分解
mergeSort(ary, mid+1, right);
// 进行递归并归排序
merge(ary, left, mid, right);
}
}
/**
* 进行归并
* @param ary 未排序的序列
* @param left 序列起始索引
* @param mid 序列中间索引
* @param right 序列末尾索引
*/
private static void merge(int[] ary, int left, int mid, int right) {
int[] tempArr = new int[ary.length];
int leftStart = left;
int rightStart = mid+1;
int tempIndex = left;
while(leftStart <= mid && rightStart <= right) {
if(ary[leftStart] < ary[rightStart]) {
tempArr[tempIndex++] = ary[leftStart++];
} else {
tempArr[tempIndex++] = ary[rightStart++];
}
}
while(leftStart <= mid) {
tempArr[tempIndex++] = ary[leftStart++];
}
while(rightStart <= right) {
tempArr[tempIndex++] = ary[rightStart++];
}
while(left <= right) {
ary[left] = tempArr[left++];
}
}
}
代码运行:

java方式实现归并排序的更多相关文章
- Java排序之归并排序
Java排序之归并排序 1. 简介 归并排序的算法是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个有序表,则成为二路合并.对于一个原始的待排序数列,往往可以通过分割的方法来归结为多路合并 ...
- EBS中使用JAVA方式发送HTML格式邮件
转自huan.gu专栏:http://blog.csdn.net/gh320/article/details/17174769 EBS中使用JAVA方式发送HTML格式邮件 一.开发工具:JDevel ...
- 配置RedisTemplate、JedisPoolConfig、JedisConnectionFactory+自定义序列化 (xml+java方式)+使用
java方式配置RedisTemplate //spring注入ben //@Bean(name = "redisTemplate") public RedisTemplate i ...
- spring配置redis(xml+java方式)(最底层)
条件:引用好架包 <dependency> <groupId>org.springframework.data</groupId> <artifactId&g ...
- Java方式配置Spring MVC
概述 使用Java方式配置Spring MVC,以及回顾一下Spring MVC的各种用法. Spring MVC简述 关于Spring MVC的介绍网上有很多,这里就不再赘述了,只是要说一下,Spr ...
- SpringBoot-配置Java方式
SpringBoot中使用Java方式配置步骤如下: 在类上加入@Configuration注解,代表作为配置类 在该类方法上加入@Bean注解,代表将方法返回的Bean加入Spring容器 在该类中 ...
- Java基础(48):归并排序的Java封装含原理,完整可运行,结合VisualGo网站更好理解)
原理: 归并排序建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序, ...
- 算法-java代码实现归并排序
归并排序 对于一个int数组,请编写一个归并排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] ...
- 使用Java方式连接HDFS
IDEA中新建Maven工程,添加POM依赖, 在IDE的提示中, 点击 Import Changes 等待自动下载完成相关的依赖包. <?xml version="1.0" ...
随机推荐
- ArcMap 0 (ArcGIS10.2安装)
一如GIS深似海,从此相逢是故人(这句话适合初步接触GIS的,我算是初窥门径.还是道行太浅,只是多了感慨) 前言: 1. 本人GIS专业,对于ArcGIS较为熟悉.由于专业和其它经历需要,接触过不少各 ...
- A - ACM Computer Factory POJ - 3436 网络流
A - ACM Computer Factory POJ - 3436 As you know, all the computers used for ACM contests must be ide ...
- LeetCode--Array--Remove Duplicates from Sorted Array (Easy)
26. Remove Duplicates from Sorted Array (Easy) Given a sorted array nums, remove the duplicates in-p ...
- 老板:kill -9 的原理都不知道就敢去线上执行?明天不用来了!
GitHub 14.5k Star 的Java工程师成神之路,开放阅读了! 相信很多程序员对于Linux系统都不陌生,即使自己的日常开发机器不是Linux,那么线上服务器也大部分都是的,所以,掌握常用 ...
- [hdu4416 Good Article Good sentence]后缀自动机SAM
题意:给出串A和串集合B={B1,B2,...,Bn},求串A的所有不同子串中不是B中任一串的子串的数目. 思路:把A和B中所有字符串依次拼接在一起,然后构造后缀自动机,计算每个状态的R集合元素的最大 ...
- [hdu5375 Gray code]DP
题意:给一个二进制码,其中有一些位上为'?',对每个问号确定是'0'还是'1',最后以它对应的格雷码来取数,第i位为1则取第i个数,求取得的数的和的最大值. 思路:二进制码B转换成格雷码G的方法是,G ...
- 【漫画】互斥锁ReentrantLock不好用?试试读写锁ReadWriteLock
ReentrantLock完美实现了互斥,完美解决了并发问题.但是却意外发现它对于读多写少的场景效率实在不行.此时ReentrantReadWriteLock来救场了!一种适用于读多写少场景的锁,可以 ...
- ReactNative报错:Can't find variable: __fbBatchedBridge
最近开始研究ReactNative,首先根据网上教程 http://www.codeceo.com/article/windows-react-native-android.html 一步一步来.完成 ...
- android progressbar 自定义图片匀速旋转
项目中需要使用圆形进度条进行数据加载的显示,所以需要两个步骤 1:自定义progressbar滚动图片 2:匀速旋转图片 步骤一:自定义progressbar图片 <ProgressBar an ...
- 5-JVM常用的命令
JVM常用的命令 jps :基础工具 查看JAVA进程PID. jps 命令用来查看所有 Java 进程,每一行就是一个 Java 进程信息. jps 仅查找当前用户的 Java 进程,而不是当前系统 ...