import java.util.Arrays;public class Mergesort {public static void main(String[] args) {int arr[]={8,4,5,7,1,3,6,2};int temp[]=new int[arr.length];//归并排序需要一个额外空间mergeSort(arr,0,arr.length-1,temp);System.out.println("归并排序后="+ Arrays.toString(arr));}/*要先“分”,因为后面要“并”,所以也就是分成一个一个的怎么分 ,可以从中间切,然后分成2组,这样递归,直到分成都是一个一个的为什么merge写在mergeSort里面一起递归 这个很巧妙因为mergeSort递归很明显 从他最里面那层的mergeSort开始看它的merge最里面那层 也就是“分”完了的 然后在调用merge开始并 比如本题此时是八个数 两个两个并成一组再依次往外层merge 这样递归这样就能理解了*/public static void mergeSort(int[] arr,int left,int right,int[] temp){if(left<right){int mid=(left+right)/2;mergeSort(arr,left,mid,temp);//向左递归mergeSort(arr,mid+1,right,temp);//向右递归merge(arr,left,mid,right,temp);//在mergeSort里面调用合并的方法}}/*并的思想:并就是每次把两个小组两个小组并起来,并完之后小的放前面大的放后面(最开始是肯定两个数两个数合并,因为一开始都是单个的数)那怎么达到这个效果呢? 首先你要知道一点就是,每个小组肯定是小的在前面大的在后面所以就把前面那个小组的第一个数依次和后面那个小组的数比 假如比后者小 就直接放进temp数组里然后就继续第一个小组第二个和那个数比 比他小 继续放进temp 直到有比它大的才把第二组那个数放进去再拿第二组第二个跟第一组刚刚那个数比 这样比下去...*///合并的方法public static void merge(int[] arr,int left,int mid,int right,int[] temp){int i=left;//初始化i,左边有序序列的初始索引int j=mid+1;//初始化j,右边有序序列的初始索引int t=0;//指向temp数组的当前索引while(i<=mid && j<=right){if(arr[i]<=arr[j]){//如果左边那组的当前元素小于右边,那么就将左边那个元素填充到temptemp[t]=arr[i];t+=1;i+=1;}else{temp[t]=arr[j];//反之,将右边元素填充到tempt+=1;j+=1;}//把有剩余数据的一边的数据一次全部填充到tempwhile (i<=mid){temp[t]=arr[i];t+=1;i=+1;}while (j<=right){temp[t]=arr[j];t+=1;j=+1;}//将temp数组的元素全部拷贝到arr//注意:不是每次拷贝所有 因为是一层一层的 每次并完一层就拷贝一层到arr 所以每层arr中元素顺序都不一样的 因为比过大小了t=0;int tempLeft=left;while(tempLeft<=right){arr[tempLeft]=temp[t];t+=1;tempLeft+=1;}}}}

归并排序java详解相关推荐

  1. 归并排序Java详解+例题

    归并排序->分治 归并排序 归并排序->分治 背景 归并原理与过程 原理: 过程 图形展示 模板代码 模板讲解 归并例子 完整java代码 背景 归并排序是十大排序之一 十大排序: 归并原 ...

  2. java8编程开发入门 李兴华_李兴华系列--JAVA详解视频(jdk1.8)及项目实战教程

    李兴华系列--JAVA详解视频教程(jdk1.8)有源码+文档01_<Oracle从入门到精通> 02_<Java8编程入门> 03_<Java8面向对象编程> 0 ...

  3. Java详解剑指offer面试题50--第一个只出现一次的字符

    Java详解剑指offer面试题50–第一个只出现一次的字符 找出字符串中找出第一个只出现一次的字符,比如输入"abacceff",则输出'b' 要想知道某个字符是不是只出现了一次 ...

  4. 十大经典排序算法-归并排序算法详解

    十大经典排序算法 十大经典排序算法-冒泡排序算法详解 十大经典排序算法-选择排序算法详解 十大经典排序算法-插入排序算法详解 十大经典排序算法-希尔排序算法详解 十大经典排序算法-快速排序算法详解 十 ...

  5. 逆向工程生成的Mapper.xml以及*Example.java详解

    逆向工程生成的接口中的方法详解 在我上一篇的博客中讲解了如何使用Mybayis逆向工程针对单表自动生成mapper.java.mapper.xml.实体类,今天我们先针对mapper.java接口中的 ...

  6. file java详解_Java中File的实例详解

    Java中File的实例详解 File 代表文件或者目录的类 构造函数 File(File parent,String child)---代表了指定父目录下的指定的子文件或者子目录 File(Stri ...

  7. Java详解去除字符串中空格的方法

    Java去除字符串中空格的方法详解 代码中字符串使用了replaceAll()方法,去除了所有空格(其中包括:首尾空格.中间空格) 遂整理下java关于字符串去除空格的方法. 1.方法分类 str.t ...

  8. websocket java详解_WebSocket详解

    WebSocket详解 WebSocket可提供一个在 单一TCP连接全双工双向通信协议.全双工意味着客户端和服务器可以独立发送信息给 对方.双向意味着客户端可以向服务器发送信息, 反之亦然. Web ...

  9. Java详解:淘宝秒杀脚本java

    造成雪崩的真实场景 1.4.1 服务提供者不可用 硬件故障:如网络故障.硬盘损坏等. 程序的 bug:如算法需要占用大量 CPU 的计算时间导致 CPU 使用率过高. 缓存击穿:比如应用刚重启,短时间 ...

  10. java 详解 搭建 框架_在Eclipse中搭建Struts框架过程详解

    虽然用MyEclipse搭建Struts框架是更为便捷的方式,但是用Eclipse可以增强自己对Struts的理解.本文演示了使用Eclipse搭建Struts 1.2框架的过程.此项目实现了简单的功 ...

最新文章

  1. 与用户登录shell相关的文件/etc/profile,~/bashrc等浅析
  2. 这是我见过的最全的训练数据集,没有之一!
  3. WIN10+VS2015环境下安装PCL1.8.1
  4. day17 Python 反射获取内容和修改内容
  5. c# 多线程界面卡顿_C#多线程解决界面卡死问题的完美解决方案
  6. 办暂住证,郁闷,极度不爽.
  7. 在windows上删除linux文件夹,java-如何从Linux删除远程Windows中的文件夹
  8. 10行代码带你入门Windows编程
  9. WPS2012专业版序列号
  10. 使用Visio 2003画UML类图之使用实现接口图标
  11. cadence allegro番外:制作flash焊盘
  12. 抖音数据统计_抖音账号数据分析
  13. 10015---Maven笔记
  14. 合工大OJ 1359
  15. 简单学JAVA-学好Java能做啥
  16. ISP(二) Demosiac 去马赛克 (CIP)
  17. C++中using的四大用法总结
  18. Win10怎么关闭smartscreen筛选器检测功能?
  19. pyqt 服务器mysql_PyQt5 中调用MySql接口失败 ( QSqlDatabase 组件) 在Linux环境下如何修改...
  20. python画图显示不全屏_关于matplotlib:如何使用Python最大化plt.show()窗口

热门文章

  1. FeedingBottle3.2的下载网站
  2. 计算机课题立项申报书范文,课题立项申请书怎么写
  3. SVN 安装与使用教程 2020年9月更新最新教程
  4. 西门子1500和300哪个贵_西门子PLC S7-300和1500之间的通信资源管理之比较?
  5. 学生信息管理系统html界面,学生信息管理系统jsp课程设计.doc
  6. 自学-Linux-老男孩Linux77期-day4
  7. 计算机键盘操作与基指法,计算机键盘操作.doc
  8. 小提琴1234567位置图解_小提琴入门指法(小提琴1234567位置图解)
  9. 局域网限速软件_8款Windows实用软件推荐,纯干货,总有一款是你必备的
  10. python html5 便利店收银系统_便利店收银系统使用教程