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扩展包与参数设置【实战】
如何选择可靠的免备案建站服务器?

