合并排序算法是用分治策略实现对N个元素进行排序的算法。其基本思想是:

将待排序元素分成大小大致相同 的两个子集合,分别 对两个子集合进行排序,最终将排好序的子集合合并成所要求的排好序的集合。

重点:

1.分治的实现

2.合并的实现

分治,就是把整个集合的元素一直除2化分,一直化为到没有两个元素开始合并。

图:

分治的时候比较简单,一直除2递归就行了,合并的时候为了方便就借助另一个变化的数组来接收交换的数组,

合并的时候,两个指标i、j,把值比较小的放入temp数组中,然后放入那个值的那一边的指标自加,继续比较。一直把值合部排完合并为一个数组,然后把temp数组复制回到原来数组就可以进入下一个递归。

完全代码由下:

public class  Merge
{//递归分成小部分public void merge_sort(int[] arrays,int start,int end){if(start<end){int m=(start+end)/2;merge_sort(arrays,start,m);merge_sort(arrays,m+1,end);combin_arrays(arrays,start,m,end);    }}//合并数组public void combin_arrays(int[] arrays,int start,int m,int end){int length=end-start+1;int temp[]=new int[length];//用来存放比较的数组,用完复制回到原来的数组int i=start;int j=m+1;int c=0;while(i<=m &&j<=end){if(arrays[i]<arrays[j]){temp[c]=arrays[i];i++;c++;}else{temp[c]=arrays[j];j++;c++;}}while(i<=m){temp[c]=arrays[i];i++;}while(j<=end){temp[c]=arrays[j];j++;}c=0;for(int t=start;t<=end;t++,c++){arrays[t]=temp[c];}snp(arrays);}//打印数组public void snp(int[] arrays){for(int i=0;i<arrays.length;i++){System.out.print(arrays[i]+" ");}System.out.println();}public static void main(String[] args) {Merge m=new Merge();int a[]={5,4,10,8,7,9};m.merge_sort(a,0,a.length-1);}
}

由有不对之处请大家指出,谢谢

转载于:https://www.cnblogs.com/hexiaochun/archive/2012/09/04/2670070.html

java 算法基础之三合并排序法相关推荐

  1. java 数据合并算法_Java与算法之(11) - 合并排序

    天下事,合久必分,分久必合.合并排序的基本思想正是先分再合. 例如对3, 1这个数列排序,首先是分,分为3和1两个数列,然后再合并并排序.合并需要额外的辅助空间,即建立一个两个数列长度之和的空数组用于 ...

  2. 总结c语言基础算法——冒泡排序法和选择排序法

    1.首先无论何种排序方法其最终目的是按要求将所给数据进行排序.而在C语言中可以有很多排序的方法,这里着重介绍的是常用的较为基础和重要的算法--冒泡排序法和选择排序法. 下面将举一个例子进行讲解: 要求 ...

  3. Java算法--第三章--排序(14)概述

    Java算法–第三章–排序(14)概述 排序算法的总结: 一.基础排序-----算法评估等级:O(n²) 1.冒泡 谁大谁上,每一轮都把最大的顶到天花板效率太低O(n2)–掌握swap 2.选择排序, ...

  4. 算法基础-十大排序算法及其优化(文末有抽奖福利哦)

    算法基础-十大排序算法及其优化 算法基础-十大排序算法及其优化 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Kw1LA5Q4-1607527572080)(/uplo ...

  5. 关于算法--分治法--合并排序

    分治法: 1.思想:①将问题的实例划分为同一个问题的几个较小的实例,最好拥有相同的规模:②对于较小的实例进行求解,一般使用递归法,在问题规模足够小的情况下也是用另一个算法:③如果必要的话,合并这些较小 ...

  6. 一步一步写算法(之合并排序)

    [ 声明:版权所有,欢迎转载,请勿用于商业用途.  联系信箱:feixiaoxing @163.com] 前面一篇博客提到的快速排序是排序算法中的一种经典算法.和快速排序一样,合并排序是另外一种经常使 ...

  7. 算法之旅 | 选择排序法

    算法之旅 | 选择排序法 HTML5学堂-码匠:数据快速的计算与排序,与前端页面性能有直接的关系.由于排序的算法有很多,在本次"算法系列"的分享当中,我们先从简单易上手的选择排序法 ...

  8. python实现五大基本算法_算法基础:五大排序算法Python实战教程

    排序是每个算法工程师和开发者都需要一些知识的技能. 不仅要通过编码实现,还要对编程本身有一般性的了解. 不同的排序算法是算法设计如何在程序复杂性,速度和效率方面具有如此强大影响的完美展示. 让我们来看 ...

  9. c++归并排序_合并排序法

    一.合并排序(Merge Sort) 就是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个 有序表,那么称为二路合并.对于一个原始的待排序序列,往往可以通过分割的方法来归结为多路合 并排序 ...

  10. C语言实现-合并排序法

    图示         如下图所示, "合并排序"也即将数据分别合并,在合并过程中进行排序,然后再合并.再排序......并最终实现合并到一起并完整排好顺序. 代码实现 说明:编译环 ...

最新文章

  1. ASP.NET配置文件Web.config
  2. 适合平面设计的linux版本,Qogir - 色彩鲜艳的Linux平面设计图标主题
  3. java orm框架什么意思_ORM框架是什么
  4. 2019长安大学ACM校赛网络同步赛 J Binary Number(组合数学+贪心)
  5. bzoj2751[HAOI2012]容易题(easy)
  6. centos 7.6安装java_Hadoop的安装
  7. Chapter1-2_Speech_Recognition(LAS)
  8. java jta 例子_Java事务处理全解析(八)——分布式事务入门例子(Spring+JTA+Atomikos+Hibernate+JMS)...
  9. CornerNet: 将目标检测问题视作关键点检测与配对
  10. ./configure make make install详解
  11. QT新建项目显示项目未配置的原因与解决方案
  12. 不下载APP就不能看全文?工信部出手了...
  13. java使用重绘实现拖动_【Android】利用自己定义View的重绘实现拖动移动,获取组件的尺寸...
  14. 朱松纯教授浅谈人工智能:现状、任务、构架与统一
  15. java基础选择题及答案_100道Java基础面试题收集整理(附答案)
  16. Hybrid APP的离线存储总结
  17. 测试英语语法的软件,1Checker,一款实用的英语语法检测软件
  18. 数据库一对一、一对多、多对多,表设计
  19. 好看的个人在线要饭网站PHP源码+LayUi框架
  20. 赛灵思MPSOC裸机下的 USB调试实验

热门文章

  1. 关于全局异常捕获的思考-真正的全局异常捕获
  2. Springboot配置devtools实现热部署
  3. Gibbs Sampling\吉布斯采样(二)
  4. android studio for android learning (十一) 利用bundle在activity之间进行数据传递示例
  5. 数值计算详细笔记(一):基础数学知识回顾
  6. indesign用于产品排班_2019年机器人行业十大新品盘点,过去一年最受关注的产品都在这...
  7. Raki的nlp-begginer 提问
  8. java打印出日历_java控制台打印本月的日历
  9. 牛客网_Wannafly模拟赛1
  10. hdu5258简单枚举