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 画布在主流浏览器中的尺寸限制详细介绍
悟空识字如何进行跟读录音_悟空识字开启麦克风权限与录音

