java 算法之归并排序详解

一、思想
归并排序:将一个数组排序,可以先(递归地)将它分成两半部份分别排序,然后将结果归并起来;
二、概念
归并:将两个有序的数组归并成一个更大的有序数组;
三、特点
优点:能够保证将任意长度为N的数组排序所需要的时间和NlogN成正比;
缺点:需要额外的空间和N成正比;
四、实现方法
将两个不同的有序数组归并到第三个数组中;
先将前半部分排序,在将后半部分排序,然后在数组中移动元素而不需要使用额外的空间;
五、代码
/**
* 归并排序
*
* @author pengcx
*
*/
public class Merge extends Sort {
/** 归并所需的辅助数组 */
private static Comparable[] aux;
public static void main(String[] args) {
String[] a = { "d", "a", "w", "b", "q" };
Merge.sort(a);
show(a);
}
public static void sort(Comparable[] a) {
aux = new Comparable[a.length];
sort(a, 0, a.length - 1);
}
/**
* 排序数组的a[lo]至a[hi]元素
*
* @param a
* 数组a
* @param lo
* 最小元素位置lo
* @param hi
* 最大元素位置hi
*/
private static void sort(Comparable[] a, int lo, int hi) {
if (hi <= lo) {
return;
}
// 计算数组中间位置
int mid = lo + (hi - lo) / 2;
// 排序数组a左边的元素
sort(a, lo, mid);
// 排序数组a右边的元素
sort(a, mid + 1, hi);
// 合并数组a左边和右边的元素
merge(a, lo, mid, hi);
}
/**
* 将数组a的a[lo]至a[mid]的元素与a[mid]至a[hi]的元素合并
*
* @param a
* 合并的数组a
* @param lo
* 最小数组元素lo
* @param mid
* 中间元素位置mid
* @param hi
* 最大元素位置hi
*/
public static void merge(Comparable[] a, int lo, int mid, int hi) {
int i = lo, j = mid + 1;
for (int k = lo; k <= hi; k++) {
aux[k] = a[k];
}
for (int k = lo; k <= hi; k++) {
// 如果左边的元素用尽,取右边的元素
if (i > mid) {
a[k] = aux[j++];
}
// 如果右边的元素用尽,取左边的元素
else if (j > hi) {
a[k] = aux[i++];
}
// 如果右半边的当前元素小于左半边的当前元素,取右半边元素
else if (less(aux[j], aux[i])) {
a[k] = aux[j++];
}
// 如果右半边的当前元素大于等于左半边的当前元素,取左半边元素
else {
a[k] = aux[i++];
}
}
}
}
感谢阅读,希望能帮助到大家,谢谢大家对本站的支持!
# java
# 归并排序
# 归并排序详解
# 归并排序实例
# java二路归并排序示例分享
# java实现归并排序算法
# Java经典排序算法之归并排序详解
# Java 归并排序算法、堆排序算法实例详解
# java 中归并排序算法详解
# Java分治归并排序算法实例详解
# java 排序算法之归并排序
# Java算法之归并排序举例详解
# 递归
# 成正比
# 更大
# 所需
# 而不
# 希望能
# 将它
# 谢谢大家
# 所需要
# 先将
# 中移动
# 组中
# 长度为
# 后半部
# 前半
# strong
# class
# pengcx
# author
# brush
相关文章:
合肥做个网站多少钱,合肥本地有没有比较靠谱的交友平台?
如何在Mac上搭建Golang开发环境_使用Homebrew安装和管理Go版本
建站之星导航如何优化提升用户体验?
如何零基础开发自助建站系统?完整教程解析
英语简历制作免费网站推荐,如何将简历翻译成英文?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
动图在线制作网站有哪些,滑动动图图集怎么做?
手机网站制作平台,手机靓号代理商怎么制作属于自己的手机靓号网站?
杭州银行网站设计制作流程,杭州银行怎么开通认证方式?
如何快速查询网址的建站时间与历史轨迹?
专业公司网站制作公司,用什么语言做企业网站比较好?
定制建站哪家更专业可靠?推荐榜单揭晓
如何通过西部数码建站助手快速创建专业网站?
如何通过西部建站助手安装IIS服务器?
全景视频制作网站有哪些,全景图怎么做成网页?
如何在阿里云香港服务器快速搭建网站?
外汇网站制作流程,如何在工商银行网站上做外汇买卖?
宝塔面板如何快速创建新站点?
制作网页的网站有哪些,电脑上怎么做网页?
网站建设设计制作营销公司南阳,如何策划设计和建设网站?
如何用wdcp快速搭建高效网站?
宁波免费建站如何选择可靠模板与平台?
如何处理“XML格式不正确”错误 常见XML well-formed问题解决方法
如何通过wdcp面板快速创建网站?
高防服务器租用如何选择配置与防御等级?
建站VPS能否同时实现高效与安全翻墙?
油猴 教程,油猴搜脚本为什么会网页无法显示?
昆明高端网站制作公司,昆明公租房申请网上登录入口?
再谈Python中的字符串与字符编码(推荐)
如何在景安云服务器上绑定域名并配置虚拟主机?
如何在服务器上三步完成建站并提升流量?
云南网站制作公司有哪些,云南最好的招聘网站是哪个?
建站主机选购指南:核心配置与性价比推荐解析
黑客如何利用漏洞与弱口令入侵网站服务器?
公司门户网站制作流程,华为官网怎么做?
活动邀请函制作网站有哪些,活动邀请函文案?
如何在阿里云虚拟机上搭建网站?步骤解析与避坑指南
广州美橙建站如何快速搭建多端合一网站?
如何通过商城免费建站系统源码自定义网站主题?
如何做静态网页,sublimetext3.0制作静态网页?
表情包在线制作网站免费,表情包怎么弄?
香港服务器建站指南:外贸独立站搭建与跨境电商配置流程
如何使用Golang table-driven基准测试_多组数据测量函数效率
seo网站制作优化,网站SEO优化步骤有哪些?
视频网站制作教程,怎么样制作优酷网的小视频?
北京建设网站制作公司,北京古代建筑博物馆预约官网?
无锡制作网站公司有哪些,无锡优八网络科技有限公司介绍?
建站之星安装后如何配置SEO及设计样式?
做企业网站制作流程,企业网站制作基本流程有哪些?
h5在线制作网站电脑版下载,h5网页制作软件?
*请认真填写需求信息,我们会在24小时内与您取得联系。