一、基本思想

归并排序是建立在归并操作上的一种排序算法,该算法是采用分治法的一个典型应用。具体操作如下:所谓的分治就是分而治之,以一分为二的原则,先把序列平均分解成二个左右子序列,然后递归左右二个子序列进行分解操作,直到得到的子序列为一个元素时,然后两两合并子序列并排序,然后递归以上合并操作,直到合并完整个序列。归并排序的平均时间复杂度为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方式实现归并排序的更多相关文章

  1. Java排序之归并排序

    Java排序之归并排序 1. 简介 归并排序的算法是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个有序表,则成为二路合并.对于一个原始的待排序数列,往往可以通过分割的方法来归结为多路合并 ...

  2. EBS中使用JAVA方式发送HTML格式邮件

    转自huan.gu专栏:http://blog.csdn.net/gh320/article/details/17174769 EBS中使用JAVA方式发送HTML格式邮件 一.开发工具:JDevel ...

  3. 配置RedisTemplate、JedisPoolConfig、JedisConnectionFactory+自定义序列化 (xml+java方式)+使用

    java方式配置RedisTemplate //spring注入ben //@Bean(name = "redisTemplate") public RedisTemplate i ...

  4. spring配置redis(xml+java方式)(最底层)

    条件:引用好架包 <dependency> <groupId>org.springframework.data</groupId> <artifactId&g ...

  5. Java方式配置Spring MVC

    概述 使用Java方式配置Spring MVC,以及回顾一下Spring MVC的各种用法. Spring MVC简述 关于Spring MVC的介绍网上有很多,这里就不再赘述了,只是要说一下,Spr ...

  6. SpringBoot-配置Java方式

    SpringBoot中使用Java方式配置步骤如下: 在类上加入@Configuration注解,代表作为配置类 在该类方法上加入@Bean注解,代表将方法返回的Bean加入Spring容器 在该类中 ...

  7. Java基础(48):归并排序的Java封装含原理,完整可运行,结合VisualGo网站更好理解)

    原理: 归并排序建立在归并操作上的一种有效的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用. 将已有序的子序列合并,得到完全有序的序列:即先使每个子序列有序, ...

  8. 算法-java代码实现归并排序

    归并排序 对于一个int数组,请编写一个归并排序算法,对数组元素排序. 给定一个int数组A及数组的大小n,请返回排序后的数组. 测试样例: [1,2,3,5,2,3],6 [1,2,2,3,3,5] ...

  9. 使用Java方式连接HDFS

    IDEA中新建Maven工程,添加POM依赖, 在IDE的提示中, 点击 Import Changes 等待自动下载完成相关的依赖包. <?xml version="1.0" ...

随机推荐

  1. Nginx入门资料

    最近在学习Nginx,记录一下自己的学习历程. 1. Nginx开发从入门到精通 (淘宝技术团队编写,值得一看) 2. <深入理解Nginx:模块开发与架构解析> 3. Nginx模块开发 ...

  2. WCF学习(二)

    WCF通道模型 绑定的本质是一个配置好的通道栈,为了方便程序员专著与业务逻辑,WCF提高了一系列常用绑定.随后会有相应的自定义通道栈代码 无论交互的另一方具体位置在哪里,WCF都会为消息的发送和接收建 ...

  3. github使用命令

    创建本地库,提交,和绑定github ,上传代码 git init git add README.md git commit -m "first commit" git remot ...

  4. java线程池原理解析

    五一假期大雄看了一本<java并发编程艺术>,了解了线程池的基本工作流程,竟然发现线程池工作原理和互联网公司运作模式十分相似. 线程池处理流程 原理解析 互联网公司与线程池的关系 这里用一 ...

  5. LeetCode--Array--Container With Most Water (Medium)

    11. Container With Most Water (Medium)# Given n non-negative integers a1, a2, ..., an , where each r ...

  6. 【FPGA篇章五】FPGA函数任务:对讲解函数与任务专题展开详解

    欢迎大家关注我的微信公众账号,支持程序媛写出更多优秀的文章 任务和函数也属于过程块,多用于仿真文件设计中,使用两者的目的有所区别: 函数(function):对输入的值执行一些处理,返回一个新的值. ...

  7. [whu1564]后缀数组

    http://acm.whu.edu.cn/land/problem/detail?problem_id=1564 思路:先把串复制一遍,在末尾补个标记,后缀数组跑一下,扫一遍就ok了(过滤后缀在后半 ...

  8. 如何应对Kubernetes的安全挑战?

    导读:Kubernetes的广泛使用证明了企业的信念,即他们不仅具有处理现代应用程序开发和现代化计划的复杂性的能力,而且具有大规模处理能力. 根据CNCF对各种规模的公司中1340位技术专家的最新调查 ...

  9. 使用 PyCharm 添加 Django 项目

    一.前置准备(PyCharm与Python的下载,已有的跳过) 1.首先下载PyCharm 地址:http://www.jetbrains.com/pycharm/ 2.然后下载Python 地址:h ...

  10. qt creator源码全方面分析(4-6)

    目录 Qt插件基础 Qt插件基础 我们知道Qt Creator源码是基于插件架构的,那么我们先来介绍下插件基础知识. 相关内容如下: How to Create Qt Plugins [ - Defi ...