本篇内容:

  • 归并排序

归并排序

算法思想:

将两个或两个以上的有序表合并成一个新的有序表,

即把待排序序列分成若干个子序列,每个子序列是有序的,然后在把有序子序列合并为整体有序序列.

此算法分为两步:

(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代码实现(四)—— 归并排序的更多相关文章

  1. 排序算法Java代码实现(一)—— 选择排序

    以下几篇随笔都是记录的我实现八大排序的代码,主要是贴出代码吧,讲解什么的都没有,主要是为了方便我自己复习,哈哈,如果看不明白,也不要说我坑哦! 本片分为两部分代码: 常用方法封装 排序算法里需要频繁使 ...

  2. 八大排序算法java代码

    1.冒泡排序 public static void main(String[] args) { int[] arr = {1,4,2,9,5,7,6}; System.out.println(&quo ...

  3. 排序算法Java代码实现(三)—— 插入排序 和 希尔排序

    因为希尔排序的核心思想是插入排序,所以本篇将两篇排序一起记录 本篇内容: 插入排序 希尔排序 (一)插入排序 算法思想: 把n个待排序的元素看成一个有序表和一个无序表,开始时有序表中只有一个元素,无序 ...

  4. 排序算法Java代码实现(六)—— 堆排序

    本片内容: 堆排序 堆排序 最大堆: 二叉堆是完全二叉树或者是近似完全二叉树, 当父结点的键值总是大于或等于任何一个子节点的键值时为最大堆.(父节点大于任何一个子节点) 算法思想: 把n个元素建立最大 ...

  5. 排序算法Java代码实现(五)—— 快速排序

    本篇内容: 快速排序 快速排序 算法思想: 通过一趟排序将要排序的数据分割成独立的两部分, 其中一部分的所有数据都比另外一部分的所有数据都要小, 然后再按此方法对这两部分数据分别进行快速排序, 整个排 ...

  6. 排序算法Java代码实现(二)—— 冒泡排序

    本篇内容: 冒泡排序 冒泡排序 算法思想: 冒泡排序的原理是:从左到右,相邻元素进行比较. 每次比较一轮,就会找到序列中最大的一个或最小的一个.这个数就会从序列的最右边冒出来. 代码实现: /** * ...

  7. java排序算法(九):归并排序

    java排序算法(九):归并排序

  8. 专题 查找与排序的Java代码实现(一)

    专题 查找与排序的Java代码实现(一) 查找(Searching) 线性查找(linear search) 属于无序查找算法,适合于存储结构为顺序存储或链接存储的线性表. 基本思想:从数据结构线形表 ...

  9. Python实现各种排序算法的代码示例总结

    Python实现各种排序算法的代码示例总结 作者:Donald Knuth 字体:[增加 减小] 类型:转载 时间:2015-12-11我要评论 这篇文章主要介绍了Python实现各种排序算法的代码示 ...

随机推荐

  1. 多版本切换python

    Python 安装包去官网自行下载: https://www.python.org/downloads/mac-osx/ Mac os 自带python, 但我记得是python2.7版本 在选择安装 ...

  2. web下载附件及修改名称

    /** * @param: url 附件地址 * @param: filename 下载后的文件名 */ function download(url, filename) { getBlob(url, ...

  3. [TCP/IP] TCP在listen时的参数backlog的意义

    linux内核中会维护两个队列:  1)未完成队列:接收到一个SYN建立连接请求,处于SYN_RCVD状态  2)已完成队列:已完成TCP三次握手过程,处于ESTABLISHED状态  3)当有一个S ...

  4. Centos7安装宝塔控制面板

    目录 宝塔面板安装和使用图文教程 1,通过ssh工具登录服务器 2,安装宝塔面板 2,登录宝塔面板 3,设置宝塔面板 3.1,首先我们进入面板设置 3.2,更改面板端口 3.3,绑定域名 3.4,绑定 ...

  5. linux设备驱动程序-设备树(1)-dtb转换成device_node

    linux设备驱动程序-设备树(1)-dtb转换成device_node 本设备树解析基于arm平台 从start_kernel开始 linux最底层的初始化部分在HEAD.s中,这是汇编代码,我们暂 ...

  6. 笔记14:Docker 部署Python项目

    Docker 部署Python项目 导读: 软件开发最大的麻烦事之一就是环境配置,操作系统设置,各种库和组件的安装.只有它们都正确,软件才能运行.如果从一种操作系统里面运行另一种操作系统,通常我们采取 ...

  7. PoI 3.17 已过时代码对比

    PoI 3.17 已过时代码对比颜色定义变化旧版本 : HSSFColor.BLACK.index新版本 : IndexedColors.BLACK.index 获取单元格格式旧版本 : cell.g ...

  8. day35_8_19 数据库

    一.存储引擎 不同的数据应该有不同的处理机制 MySQL中也有不同的存储引擎: 1.InnoDB MySQL默认的存储引擎. innoDB比myisam存储数据要安全. innoDB支持事务. inn ...

  9. Excel-统计函数

    1.Count系列函数 COUNT 数字个数----下面结果为 4 counta 非空的字数 ----下面为6 COUNTBLANK ------非空个数  ---- 下面为9 如何将字符串形式的数字 ...

  10. .NET开发中 springMVC+NHibernate注入失败的几个常见错误

    1.spring程序集没引用,这个一定要引用,还有就是如果有Redis,还需引用ServiceStack 2.webConfig没配置对,这个没对一般会报错 3.也许Global.asax文件没引入全 ...