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


相关推荐: 如何在Ubuntu系统下快速搭建WordPress个人网站?  Laravel怎么发送邮件_Laravel Mail类SMTP配置教程  家族网站制作贴纸教程视频,用豆子做粘帖画怎么制作?  微信小程序 配置文件详细介绍  Laravel如何使用Service Provider服务提供者_Laravel依赖注入与容器绑定【深度】  html如何与html链接_实现多个HTML页面互相链接【互相】  Python进程池调度策略_任务分发说明【指导】  Laravel如何使用Spatie Media Library_Laravel图片上传管理与缩略图生成【步骤】  Laravel distinct去重查询_Laravel Eloquent去重方法  专业企业网站设计制作公司,如何理解商贸企业的统一配送和分销网络建设?  如何制作新型网站程序文件,新型止水鱼鳞网要拆除吗?  Laravel如何创建和注册中间件_Laravel中间件编写与应用流程  JS中使用new Date(str)创建时间对象不兼容firefox和ie的解决方法(两种)  微信推文制作网站有哪些,怎么做微信推文,急?  国美网站制作流程,国美电器蒸汽鍋怎么用官方网站?  胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?  新三国志曹操传主线渭水交兵攻略  如何在万网利用已有域名快速建站?  Win11怎么查看显卡温度 Win11任务管理器查看GPU温度【技巧】  Laravel怎么多语言本地化设置_Laravel语言包翻译与Locale动态切换【手册】  网站制作大概多少钱一个,做一个平台网站大概多少钱?  Laravel如何实现全文搜索功能?(Scout和Algolia示例)  浅述节点的创建及常见功能的实现  长沙企业网站制作哪家好,长沙水业集团官方网站?  JavaScript模板引擎Template.js使用详解  中山网站推广排名,中山信息港登录入口?  关于BootStrap modal 在IOS9中不能弹出的解决方法(IOS 9 bootstrap modal ios 9 noticework)  Laravel怎么做数据加密_Laravel内置Crypt门面的加密与解密功能  Python文件流缓冲机制_IO性能解析【教程】  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  Laravel如何处理文件上传_Laravel Storage门面实现文件存储与管理  如何快速搭建高效简练网站?  如何用ChatGPT准备面试 模拟面试问答与职场话术练习教程  Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践  Laravel如何使用.env文件管理环境变量?(最佳实践)  JS实现鼠标移上去显示图片或微信二维码  如何自定义safari浏览器工具栏?个性化设置safari浏览器界面教程【技巧】  如何确保FTP站点访问权限与数据传输安全?  Laravel Facade的原理是什么_深入理解Laravel门面及其工作机制  Linux网络带宽限制_tc配置实践解析【教程】  Laravel软删除怎么实现_Laravel Eloquent SoftDeletes功能使用教程  微博html5版本怎么弄发语音微博_语音录制入口及时长限制操作【教程】  美食网站链接制作教程视频,哪个教做美食的网站比较专业点?  如何在IIS服务器上快速部署高效网站?  如何为不同团队 ID 动态生成多个非值班状态按钮  Laravel怎么实现模型属性的自动加密  活动邀请函制作网站有哪些,活动邀请函文案?  如何撰写建站申请书?关键要点有哪些?  Laravel怎么生成二维码图片_Laravel集成Simple-QrCode扩展包与参数设置【实战】  如何选择可靠的免备案建站服务器?