排序算法Java代码实现(四)—— 归并排序
本篇内容:
- 归并排序
归并排序
算法思想:
将两个或两个以上的有序表合并成一个新的有序表,
即把待排序序列分成若干个子序列,每个子序列是有序的,然后在把有序子序列合并为整体有序序列.
此算法分为两步:
(1)把数组等长切分;
(2)把切分后的数组进行排序,然后合并;
通过切分方法的递归调用,可以将数组切分到最小(2个元素)的组合;
代码:
(1)合并两个数组的方法:
//将两个数组合并
public static void Merge(int[] array,int low,int mid,int high)
{
int[] temp = new int[high-low+1];
int pLeft = low;
int pRight = mid+1;
int k = 0;
//先把较小的数移到新数组中
while(pLeft <= mid&&pRight <= high)
{
if(array[pLeft]<array[pRight])
{
temp[k++] = array[pLeft++];
}else
{
temp[k++] = array[pRight++];
}
}
//把左边剩余的数移到新数组中
while(pLeft <= mid)
{
temp[k++] = array[pLeft++];
}
//把右边剩余的数移入新数组
while(pRight <= high)
{
temp[k++] = array[pRight++];
}
//用新数组中的数覆盖array数组
for(int i = 0;i < temp.length ; i++)
{
array[i+low] = temp[i];
}
printArray(array);
}
(2)自顶向下合并数组
/*
* 将两个或两个以上的有序表合并成一个新的有序表
* 即把待排序序列分成若干个子序列,每个子序列是有序的,然后在把有序子序列合并为整体有序序列
* */
public static void MergeSorting(int[] array,int low,int high)
{
if(low == high)
{
return;
}
int mid = (low + high)/2;
if(low<high)
{
//对左边排序
MergeSorting(array,low,mid);
//对右边排序
MergeSorting(array,mid+1,high);
//左右合并
Merge(array,low,mid,high);
}
}
实现结果:

排序算法Java代码实现(四)—— 归并排序的更多相关文章
- 排序算法Java代码实现(一)—— 选择排序
以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...
- 八大排序算法java代码
1.冒泡排序 public static void main(String[] args) { int[] arr = {1,4,2,9,5,7,6}; System.out.println(&quo ...
- 排序算法Java代码实现(三)—— 插入排序 和 希尔排序
因为希尔排序的核心思想是插入排序,所以本篇将两篇排序一起记录 本篇内容: 插入排序 希尔排序 (一)插入排序 算法思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序 ...
- 排序算法Java代码实现(六)—— 堆排序
本片内容: 堆排序 堆排序 最大堆: 二叉堆是完全二叉树或者是近似完全二叉树, 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆.(父节点大于任何一个子节点) 算法思想: 把n个元素建立最大 ...
- 排序算法Java代码实现(五)—— 快速排序
本篇内容: 快速排序 快速排序 算法思想: 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序, 整个排 ...
- 排序算法Java代码实现(二)—— 冒泡排序
本篇内容: 冒泡排序 冒泡排序 算法思想: 冒泡排序的原理是:从左到右,相邻元素进行比较. 每次比较一轮,就会找到序列中最大的一个或最小的一个.这个数就会从序列的最右边冒出来. 代码实现: /** * ...
- java排序算法(九):归并排序
java排序算法(九):归并排序
- 专题 查找与排序的Java代码实现(一)
专题 查找与排序的Java代码实现(一) 查找(Searching) 线性查找(linear search) 属于无序查找算法,适合于存储结构为顺序存储或链接存储的线性表. 基本思想:从数据结构线形表 ...
- Python实现各种排序算法的代码示例总结
Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...
随机推荐
- 多版本切换python
Python 安装包去官网自行下载: https://www.python.org/downloads/mac-osx/ Mac os 自带python, 但我记得是python2.7版本 在选择安装 ...
- web下载附件及修改名称
/** * @param: url 附件地址 * @param: filename 下载后的文件名 */ function download(url, filename) { getBlob(url, ...
- [TCP/IP] TCP在listen时的参数backlog的意义
linux内核中会维护两个队列: 1)未完成队列:接收到一个SYN建立连接请求,处于SYN_RCVD状态 2)已完成队列:已完成TCP三次握手过程,处于ESTABLISHED状态 3)当有一个S ...
- Centos7安装宝塔控制面板
目录 宝塔面板安装和使用图文教程 1,通过ssh工具登录服务器 2,安装宝塔面板 2,登录宝塔面板 3,设置宝塔面板 3.1,首先我们进入面板设置 3.2,更改面板端口 3.3,绑定域名 3.4,绑定 ...
- linux设备驱动程序-设备树(1)-dtb转换成device_node
linux设备驱动程序-设备树(1)-dtb转换成device_node 本设备树解析基于arm平台 从start_kernel开始 linux最底层的初始化部分在HEAD.s中,这是汇编代码,我们暂 ...
- 笔记14:Docker 部署Python项目
Docker 部署Python项目 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如果从一种操作系统里面运行另一种操作系统,通常我们采取 ...
- PoI 3.17 已过时代码对比
PoI 3.17 已过时代码对比颜色定义变化旧版本 : HSSFColor.BLACK.index新版本 : IndexedColors.BLACK.index 获取单元格格式旧版本 : cell.g ...
- day35_8_19 数据库
一.存储引擎 不同的数据应该有不同的处理机制 MySQL中也有不同的存储引擎: 1.InnoDB MySQL默认的存储引擎. innoDB比myisam存储数据要安全. innoDB支持事务. inn ...
- Excel-统计函数
1.Count系列函数 COUNT 数字个数----下面结果为 4 counta 非空的字数 ----下面为6 COUNTBLANK ------非空个数 ---- 下面为9 如何将字符串形式的数字 ...
- .NET开发中 springMVC+NHibernate注入失败的几个常见错误
1.spring程序集没引用,这个一定要引用,还有就是如果有Redis,还需引用ServiceStack 2.webConfig没配置对,这个没对一般会报错 3.也许Global.asax文件没引入全 ...