归并排序的优点不说了。

做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组。

思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有了,先比较两个数组的首元素,谁更小就放入结果数组里面,然后指针下移,继续比较,直到有一个数组为空,停止比较,因为是有序数组,那么不为空的数组后面的元素都比之前存入结果数组的要大,且是有序的,因此,只需将后面的数组存入结果数组即可。

接下来是代码实现:

/*

* 分治算法利用

* 两个有序数组的合并

* 将有序数组i,数组j,合并成c

*/

public Integer[] sort(Integer[] i, Integer[] j, Integer[] c){

c = new Integer[i.length+j.length];

int i1 = 0; //i的数组指针

int j1 = 0; //j的数组指针

int c1 = 0; //c的数组指针

while(i1 < i.length&&j1 < j.length){

if(i[i1] > j[j1]){

c[c1++] = j[j1];

j[j1++] = null;

}else{

c[c1++] = i[i1];

i[i1++] = null;

}

}

/*

* i之后还有元素

*/

while(i1

c[c1++] = i[i1];

i[i1++] = null;

}

/*

* j之后还有元素

*/

while(j1 < j.length){

c[c1++] = j[j1];

j[j1++] = null;

}

return c;

}

以上实现了将两个有序数组的合并,而归并排序,那么将一条无序数组分组成任意多个有序数组即可,并不需要确认是否是有序数组,一个数组里一个元素肯定是有序的,那么我要做的只是,递归实现数组分解,然后将有两个序数组合并。

将一个数组分解,可以用分治的方法,定义头,尾,和中间指针,然后下次的递归,只需变换中间指针即可。

而排序最开始只需要比较头部的一个元素和尾部的一个元素;

依次向上递归。

算了,贴代码吧。

public int[] mergeSort(int[] num,int first,int last){

int mid = (first+last)/2;

if(first < last){

mergeSort(num,first,mid);

mergeSort(num,mid+1,last);

merge(num,first,mid,last);

}

return num;

}

public void merge(int[] num,int first,int mid,int last){

int _left = first; //左指针

int _right = mid+1; //右指针

int[] temp = new int[last - first + 1];

int temp_p = 0;

while(_left<=mid&&_right<=last){

if(num[_left]

temp[temp_p++] = num[_left++];

}else{

temp[temp_p++] = num[_right++];

}

}

while(_left<=mid){

temp[temp_p++] = num[_left++];

}

while(_right<=last){

temp[temp_p++] = num[_right++];

}

_left = 0;

//因为没有返回数组,所以排序好的数组应该放在num数组里面,直接覆盖即可,注意下标。

for(int i : temp){

num[(_left++)+first] = i;

}

}

first,last为数组头尾指针。

归并排序 java实现_归并排序的java实现相关推荐

  1. groovy 使用java类_深入学习java中的Groovy 和 Scala 类

    前言 Java 传承的是平台,而不是语言.有超过 200 种语言可以在 JVM 上运行,它们之中不可避免地会有一种语言最终将取代 Java 语言,成为编写 JVM 程序的最佳方式.本系列将探讨三种下一 ...

  2. java 枚举_深入理解Java枚举

    所有知识体系文章,[GitHub](https://github.com/Ziphtracks/JavaLearningmanual)已收录,欢迎Star!再次感谢,愿你早日进入大厂! https:/ ...

  3. java翻译程序_有没有java代码翻译软件?

    展开全部 没有翻译软件,但是能32313133353236313431303231363533e78988e69d8331333365646333编写翻译程序. java 代码翻译实例: 1.输入一个 ...

  4. 归并排序执行次数_归并排序过程、时间复杂度分析及改进

    前言 上一篇文章,介绍过第一种基于分治策略的排序算法--快速排序.接下来我们来讨论另一种基于分治策略的排序算法,归并排序.归并排序也被认为是一种时间复杂度最优的算法,我们还是按照基本过程,代码,最坏时 ...

  5. opencv java 摄像头_使用OpenCV Java创建Windows摄像头扫码程序

    OpenCV提供了一些基本的Webcam控制接口.用OpenCV C/C++或者Python,可以在任意平台快速创建一个摄像头预览应用.然而使用Java,情况就复杂的多,因为OpenCV Java并没 ...

  6. java横线_知识点:java一些方法会有横线?以Date 过期方法为例

    原因:他们的开发者在升级方法后,添加了@Deprecated注释, 目的是为了提醒我们,这个方法现在已经有新的方法了,不建议继续使用! 比如: JAVA中Date的tolocalstring为什么不建 ...

  7. java学习_都说Java难学,不知道具体的学习内容?全套Java学习路线送上

    首先,我个人比较推崇的学习方法是:先学java前段,也就是HTML,css,js,因为学习java以后肯定是往java ee方向发展的,学习完前端,在学习后端很多东西比计较容易理解! 其中J2SE是关 ...

  8. 本地生活JAVA版本_赶集生活java版

    赶集网java版客户端 特色介绍: * 丰富的特色功能:一键拨号.GPS定位.本地收藏.拍照发帖,比电脑还方便. * 全面的服务功能:房屋租售.二手买卖.火车票转让.家政.开锁等全方位服务. * 极致 ...

  9. java 虚拟机_浅谈Java虚拟机内存区

    1. Java 虚拟机内存区概述 我们在编写程序时,经常会遇到OOM(out of Memory)以及内存泄漏等问题.为了避免出现这些问题,我们首先必须对JVM的内存划分有个具体的认识.JVM将内存主 ...

  10. java序列化_技术干货 | JAVA反序列化漏洞

    目录 反序列化漏洞 序列化和反序列化 JAVA WEB中的序列化和反序列化 对象序列化和反序列范例 JAVA中执行系统命令 重写readObject()方法 Apache Commons Collec ...

最新文章

  1. 恢复Cisco3640的IOS
  2. 软件构造第三章 第五部分
  3. SharePoint 2007 用户创建 MySite 过程发生错误一例【已解决】
  4. 方格取数 (Standard IO)
  5. matlab 提取图像轮廓(图像边缘提取)
  6. 【WIN】svchost与共享进程服务
  7. 服务器系统有哪些,各有什么特点?
  8. 阅读《我喜欢生命本来的样子》完(四)
  9. 用python写一个解一元二次方程的类
  10. 爱奇艺播放技术——300ms背后的故事
  11. 定积分的概念及可积条件
  12. Pinyin4j之Pinyin4jUtils工具类
  13. 【现代控制理论】传递函数建立状态空间表达式
  14. 【MySQL】检索数据
  15. 【工业智能】知识进化论:卓越运营是如何拥抱工业智能,如虎添翼的?
  16. linux内核声卡管理,浅析linux 2.6.30.4内核中uda134x声卡驱动源码 - audio和bluetooth
  17. python-递增的三元子序列
  18. 论“东数西算”对气象行业的影响
  19. android图片放大失真,Android中解决图片文字放大失真的问题
  20. CH9121模块只有端口2有用

热门文章

  1. Cell子刊:辛秀芳组发现病原菌效应因子操纵植物ABA激素通路促进侵染的新机制...
  2. QIIME 2教程. 25可用和开发中插件AvailableFuturePlugins(2020.11)
  3. 中科院遗传发育所王秀杰团队鉴定出10种潜在的2019-nCoV蛋白酶抑制剂
  4. NAR:rrnDB-16S拷贝数校正数据库
  5. R语言把dataframe数据转化为tibble格式、查看每个数据列的缺失值个数、使用数据列的均值对数据列的缺失值进行填充
  6. R语言ggplot2可视化:自定义设置X轴上的时间间隔(中断、以年为单位),使用scale_x_date()自定义设置坐标轴间隔和标签、添加标题、副标题、题注信息
  7. R语言对dataframe的行数据进行排序(Ordering rows)实战:使用R原生方法、data.table、dplyr等方案
  8. numpy使用np.set_printoptions函数抑制numpy数组输出结果使用科学计数法进行显示(suppressing scientific notation in numpy array)
  9. R语言lm函数拟合多项式回归模型、删除数据中的异常样本outlier、之后诊断模型( diagnostics)、使用plot函数打印回归模型的QQ图、残差拟合图、标度-位置图、残差与杠杆关系图
  10. R语言获得所有Aesthetics(美学映射)参数:使用长表输出、使用宽表输出