import java.util.Arrays;
public class Cao46
{
/**
* @归并排序
*
* 三个指针:两个指针最初位置分别为两个已经排序序列的起始位置,第三个指针两个序列的中间位置
* 两个方法:一个是递归方法
* 一个是合并方法,每一趟将最多含2的n次方个元素的单元排序
* 工作原理:

1、申请空间,使其大小为两个已经排序序列之和,该空间用来存放合并后的序列

2、设定两个指针,最初位置分别为两个已经排序序列的起始位置

3、比较两个指针所指向的元素,选择相对小的元素放入到合并空间,并移动指针到下一位置

4、重复步骤3直到某一指针达到序列尾

5、将另一序列剩下的所有元素直接复制到合并序列尾
*/
public static void main(String[] args)
{
int[] array={1,6,3,2,5,9,4,7};
sort(array,0,array.length-1);
System.out.println(Arrays.toString(array));//打印数组

}
public static void sort(int[] array, int left, int right) {
if (left<right)
{
//找出中间索引
int center=(left+right)/2;
//对左边数组进行递归
sort(array,left,center);
//对右边数组进行递归
sort(array,center+1,right);
//合并
merge(array,left,center,right);

}
}
public static void merge(int[] array, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int l = left;// 左指针
int r = mid + 1;// 右指针
int k = 0;//临时数组指针

// 把较小的数先移到新数组中
while (l<= mid && r <= right)
{
if (array[l] < array[r])
{
temp[k++] = array[l++];
}
else
{
temp[k++] = array[r++];
}
}

// 把左边剩余的数移入数组
while (l <= mid)
{
temp[k++] = array[l++];
}

// 把右边边剩余的数移入数组
while (r <= right)
{
temp[k++] = array[r++];
}
// 把新数组中的数覆盖array数组
System.arraycopy(temp, 0, array, left, right - left + 1);
}
}

转载于:https://www.cnblogs.com/guizhongyi/p/4785741.html

归并排序——java相关推荐

  1. 堆排序和归并排序 java代码实现

    文章目录 堆排序 java代码实现 单元测试 归并排序 java代码实现 单元测试 堆排序 java代码实现 package csdn.dreamzuora.sort;import java.util ...

  2. 排序算法之归并排序(JAVA)

    归并排序是利用递归和分而治之的技术将数据序列划分成为越来越小的半子表,再对半子表排序,最后再用递归步骤将排好序的半子表合并成为越来越大的有序序列,归并排序包括两个步骤,分别为: 1)划分子表 2)合并 ...

  3. 归并排序Java实现

    归并排序Java实现 public class MergeSort {public static void sort(int[] a,int left, int right){if(left > ...

  4. 归并排序--Java

    归并排序: 排序原理: 1.尽可能的一组数据拆分成两个元素相等的子组,并对每一个子组继续拆分,知道拆分后的每个子组的元素个数是1为止. 2.将相邻的两个子组进行合并成一个有序的大组 3.不断重复步骤2 ...

  5. 归并排序Java详解+例题

    归并排序->分治 归并排序 归并排序->分治 背景 归并原理与过程 原理: 过程 图形展示 模板代码 模板讲解 归并例子 完整java代码 背景 归并排序是十大排序之一 十大排序: 归并原 ...

  6. 归并排序 java实现_归并排序的java实现

    归并排序的优点不说了. 做归并排序之前,我先试着将两个有序数组进行排序,合并成一个有序数组. 思路:定义好两个有序数组,理解的时候我先思考了数组只有一个数组的排序,然后是两个元素的数组的排序,思路就有 ...

  7. 归并排序 java 迭代_经典排序算法之归并排序(示例代码)

    归并排序(英语:Merge sort,或mergesort),是创建在归并操作上的一种有效的排序算法,效率为 (大O符号).1945年由约翰·冯·诺伊曼首次提出.该算法是采用分治法(Divide an ...

  8. 归并排序的java语言_归并排序 java语言

    /* * 归并排序算法 */ public class MergeSort { final static int MAX=0x7FFFFFFF; public static void main(Str ...

  9. 912. 排序数组——归并排序Java时间复杂度空间复杂度稳定性分析

    目录 1.题目 2.思路 归并排序--nlogn 思想--递归 代码 时间复杂度--O(nlogn) 空间复杂度--O(n) 稳定性--稳定 3.结果 1.题目 2.思路 这个题可以作为练习手写各种排 ...

最新文章

  1. LeetCode简单题之字符的最短距离
  2. PL/SQL编程:用for循环算出5的阶乘
  3. 微众WeCross 跨链平台(12)合约总结
  4. 《剑指offer》-- 从上往下打印二叉树、二叉搜素树的后序遍历、二叉树中和为某一值的路径、二叉树与双向链表
  5. 腾讯 监控系统服务器数据采集,实战低成本服务器搭建千万级数据采集系统
  6. P2485-[SDOI2011]计算器【BSGS,exgcd,快速幂】
  7. kafka spark java_spark streaming中维护kafka偏移量到外部介质
  8. java junit
  9. ~~一般哈希(数据结构)(附模板题AcWing 840 模拟散列表)
  10. 多个蓝牙缺陷可使攻击者假冒合法设备
  11. 微信小程序开发之——WeUI快速上手
  12. VS2015镜像安装教程
  13. 回溯算法-八皇后问题
  14. Hbase GC调优原理分析
  15. 前端识别验证码思路分析
  16. 国内几款接口管理平台,使用体验分析对比:总有一款是你想要的!
  17. ReactNative开发之在原生页面调用rn控件
  18. html网页的说课稿,网页设计之滚动字幕说课稿
  19. iPhone 13怎么关机?苹果iPhone 13关机图文教程
  20. 无限循环的二进制小数怎么精确转换为十进制小数

热门文章

  1. Mac OSX 下 mysql 影响关系的问题处理
  2. Adobe Indesign怎么让图片衬于文字下方?
  3. 怎样备份和恢复SAV企业版服务器的设置
  4. 《『若水新闻』客户端开发教程》——16.添加广告
  5. J2EE学习笔记(1)
  6. linux C/C++内存检测
  7. Linux mysql
  8. Golang开发环境配置
  9. nodejs模块hashmap
  10. 微软3月补丁星期二修复71个漏洞,其中3个是0day