java 归并排序的实例详解

发布时间 - 2026-01-11 02:19:58    点击率:

java 归并排序的实例详解

归并排序

       归并排序,指的是将两个已经排序的序列合并成一个序列的操作。 

归并操作的过程如下:

  •  申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列
  •  设定两个指针,最初位置分别为两个已经排序序列的起始位置
  •  比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置
  •  重复步骤3直到某一指针到达序列尾
  •  将另一序列剩下的所有元素直接复制到合并序列尾

Java代码 

/** 
 * 归并排序 
 * 
 * @param ts 
 */ 
@SuppressWarnings("unchecked") 
public static <T extends Comparable<? super T>> void mergeSort(T[] ts) { 
 
  // 辅助空间 
  T[] tempArray = (T[]) new Comparable[ts.length]; 
 
  mergeSort(ts, tempArray, 0, ts.length - 1); 
} 
 
/** 
 * 递归 
 */ 
private static <T extends Comparable<? super T>> void mergeSort(T[] ts, T[] tempArray, int left, int right) { 
 
  if (left < right) { 
 
    int center = (left + right) / 2; 
 
    mergeSort(ts, tempArray, left, center); 
 
    mergeSort(ts, tempArray, center + 1, right); 
 
    // 左右合并 
    merge(ts, tempArray, left, center + 1, right); 
 
  } 
 
} 
 
/** 
 * 合并 
 */ 
private static <T extends Comparable<? super T>> void merge(T[] ts, T[] tempArray, int leftPos, int rightPos, int rightEnd) { 
  int leftEnd = rightPos - 1; 
  int temPos = leftPos; 
  int numElements = rightEnd - leftPos + 1; 
 
  while (leftPos <= leftEnd && rightPos <= rightEnd) 
    //比较放到辅助空间 
    if (ts[leftPos].compareTo(ts[rightPos]) <= 0) 
      tempArray[temPos++] = ts[leftPos++]; 
    else 
      tempArray[temPos++] = ts[rightPos++]; 
 
  while (leftPos <= leftEnd) 
    tempArray[temPos++] = ts[leftPos++]; 
 
  while (rightPos <= rightEnd) 
    tempArray[temPos++] = ts[rightPos++]; 
 
  //考回原数组,此处最好用System.arraycopy优化 
  for (int i = 0; i < numElements; i++, rightEnd--) 
    ts[rightEnd] = tempArray[rightEnd]; 
} 
 

 复杂度:O(n log n)

       比较操作的次数介于(n log n)/2和n log n - n + 1。 赋值操作的次数是(2nlogn)。

       归并算法的空间复杂度为:Θ(n) 

 稳定性:稳定 

扩展:

       在java中,当执行一次泛型排序时,进行一次元比较可能是昂贵的,但是移动元素则是省时间的。归并排序使用所有的流行的排序算法中最少的比较次数,因此是使用java的通用排序算中的上好的选择。

以上使用java 使用归并排序的简单实例,有关java算法知识本站还有很多,大家可以搜索,感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!


# java  # 归并排序  # 归并排序详解  # 排序  # Java 十大排序算法之归并排序刨析  # 图解Java排序算法之归并排序  # java 排序算法之归并排序  # JAVA十大排序算法之归并排序详解  # Java分治归并排序算法实例详解  # java 中归并排序算法详解  # Java 详细讲解分治算法如何实现归并排序  # 递归  # 则是  # 希望能  # 下一  # 使其  # 分别为  # 谢谢大家  # 指的是  # 还有很多  # 最好用  # 次元  # 最初  # ts  # param  # SuppressWarnings  # unchecked  # lt  # extends  # static  # Comparable 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: Laravel Docker环境搭建教程_Laravel Sail使用指南  Python制作简易注册登录系统  HTML5空格和margin有啥区别_空格与外边距的使用场景【说明】  西安市网站制作公司,哪个相亲网站比较好?西安比较好的相亲网站?  手机软键盘弹出时影响布局的解决方法  JavaScript如何实现倒计时_时间函数如何精确控制  LinuxShell函数封装方法_脚本复用设计思路【教程】  如何构建满足综合性能需求的优质建站方案?  如何在云服务器上快速搭建个人网站?  网站制作报价单模板图片,小松挖机官方网站报价?  Laravel如何升级到最新的版本_Laravel版本升级流程与兼容性处理  宙斯浏览器文件分类查看教程 快速筛选视频文档与图片方法  如何在Windows服务器上快速搭建网站?  手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?  在线ppt制作网站有哪些软件,如何把网页的内容做成ppt?  如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel怎么上传文件_Laravel图片上传及存储配置  高防服务器:AI智能防御DDoS攻击与数据安全保障  米侠浏览器网页图片不显示怎么办 米侠图片加载修复  如何用花生壳三步快速搭建专属网站?  EditPlus中的正则表达式 实战(4)  HTML5空格在Angular项目里怎么处理_Angular中空格的渲染问题【详解】  如何在Windows虚拟主机上快速搭建网站?  大同网页,大同瑞慈医院官网?  如何在橙子建站上传落地页?操作指南详解  Win11应用商店下载慢怎么办 Win11更改DNS提速下载【修复】  详解jQuery停止动画——stop()方法的使用  如何在企业微信快速生成手机电脑官网?  如何自定义建站之星模板颜色并下载新样式?  java ZXing生成二维码及条码实例分享  如何在建站之星绑定自定义域名?  香港服务器租用每月最低只需15元?  Android中AutoCompleteTextView自动提示  公司网站制作价格怎么算,公司办个官网需要多少钱?  Laravel怎么配置.env环境变量_Laravel生产环境敏感数据保护与读取【方法】  Laravel如何使用Vite进行前端资源打包?(配置示例)  Laravel如何使用Telescope进行调试?(安装和使用教程)  Laravel如何实现模型的全局作用域?(Global Scope示例)  网站建设要注意的标准 促进网站用户好感度!  Laravel表单请求验证类怎么用_Laravel Form Request分离验证逻辑教程  php485函数参数是什么意思_php485各参数详细说明【介绍】  php中::能调用final静态方法吗_final修饰静态方法调用规则【解答】  Linux系统命令中tree命令详解  微信小程序 require机制详解及实例代码  LinuxCD持续部署教程_自动发布与回滚机制  bootstrap日历插件datetimepicker使用方法  ChatGPT怎么生成Excel公式_ChatGPT公式生成方法【指南】  Laravel的路由模型绑定怎么用_Laravel Route Model Binding简化控制器逻辑  canvas 画布在主流浏览器中的尺寸限制详细介绍  悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音