归并排序

归并排序采用的是分治(divide-and-conquer)法思想。

(1)基本思想:将待排序元素分成大小大致相同的2个子集合,分别对2个子集合进行排序,最终将排好序的子集合合并成为所要求的排好序的集合。

(2)执行过程:

(3)算法思路:

(4)Java代码实现如下:

public class Main {public static void main(String[] args) {int[] arr = {11,44,23,67,88,65,34,48,9,12};int[] tmp = new int[arr.length];    //新建一个临时数组存放mergeSort(arr,0,arr.length-1,tmp);for(int i=0;i<arr.length;i++){System.out.print(arr[i]+" ");}}public static void merge(int[] arr,int low,int mid,int high,int[] tmp){int i = 0;int j = low,k = mid+1;  //左边序列和右边序列起始索引while(j <= mid && k <= high){if(arr[j] < arr[k]){tmp[i++] = arr[j++];}else{tmp[i++] = arr[k++];}}//若左边序列还有剩余,则将其全部拷贝进tmp[]中while(j <= mid){    tmp[i++] = arr[j++];}while(k <= high){tmp[i++] = arr[k++];}for(int t=0;t<i;t++){arr[low+t] = tmp[t];}}public static void mergeSort(int[] arr,int low,int high,int[] tmp){if(low<high){int mid = (low+high)/2;mergeSort(arr,low,mid,tmp); //对左边序列进行归并排序mergeSort(arr,mid+1,high,tmp);  //对右边序列进行归并排序merge(arr,low,mid,high,tmp);    //合并两个有序序列}}}

(5)运行结果如下:

(6)复杂度分析:

归并排序(Java代码实现)相关推荐

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

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

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

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

  3. 三路归并排序(附C++和Java代码)

    三路归并排序(附C++和Java代码) 文章目录 三路归并排序(附C++和Java代码) C++代码: Java代码: PS:阅读此文章需了解归并排序基本原理和二路归并排序 三路归并,即:将待排序数组 ...

  4. Java代码实现归并排序

    Java代码实现归并排序 归并排序(Merge Sort) 思路:如果要排序一个数组,我们先把数组从中间分成前后两部分,然后对前后两部分分别排序,再将排好序的两部分合并在一起,这样整个数组就都有序了. ...

  5. 对一致性Hash算法,Java代码实现的深入研究

    一致性Hash算法 关于一致性Hash算法,在我之前的博文中已经有多次提到了,MemCache超详细解读一文中"一致性Hash算法"部分,对于为什么要使用一致性Hash算法.一致性 ...

  6. 买什么数据结构与算法,这里有:动态图解十大经典排序算法(含JAVA代码实现)

    上篇的动图数据结构反响不错,这次来个动图排序算法大全.数据结构与算法,齐了. 几张动态图捋清Java常用数据结构及其设计原理 本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法: ...

  7. java array 元素的位置_数据结构与算法:动态图解十大经典排序算法(含JAVA代码实现)...

    点击上方"JAVA",星标公众号 重磅干货,第一时间送达 本文将采取动态图+文字描述+正确的java代码实现来讲解以下十大排序算法: 冒泡排序 选择排序 插入排序 希尔排序 归并排 ...

  8. java代码_Java 代码实现排序算法

       阅读本文约需要8分钟  大家好,我是你们的导师,我每天都会在这里给大家分享一些干货内容(当然了,周末也要允许老师休息一下哈).上次老师跟大家分享了下SpringBoot+Gradle+ MyBa ...

  9. 冒泡排序java代码_面试官问我插入排序和冒泡排序哪个更牛逼?

    (给算法爱好者加星标,修炼编程内功) 来源:小鹿动画学编程,作者:小鹿同学 写在前边 排序对于每个开发者来讲,都多多少少知道几个经典的排序算法,比如我们之前以动画形式分享的冒泡排序,也包括今天要分享的 ...

最新文章

  1. PHP设计模式之组合模式(Composite Pattern)
  2. C# SVN检出的代码,F12显示从元数据
  3. php零拷贝,百万并发「零拷贝」技术系列之初探门径
  4. Oracle® Database Performance Tuning Guide 11g Release 2 (11.2)----Configuring and Using Memory
  5. 借助云开发轻松实现后台数据批量导出丨实战
  6. github mac 添加 ssh_计算机专业MAC操作技巧(二)
  7. oracle数据库如何写翻页_在oracle数据库中的分页SQL语句怎么写?
  8. 凯恩帝数控系统面板介绍_KND凯恩帝数控系统说明书
  9. QQ坦白说使用Fiddler抓包获取json
  10. 131多机型解码擦除工具
  11. 马未都说收藏:陶瓷篇(8、9)元青花、永宣青花
  12. Innovus和ICC2中设置partial placement blockage的命令和区别
  13. 17个小时内,各地相继出手帮中小企业,地产商减租百亿
  14. 【golang】处理jpeg图片压缩后方向发生变化问题
  15. 【win7死机也有可能是这个问题】
  16. 强制重启计算机快捷键,强制重启电脑快捷键
  17. linux kernel --- checksum相关ip_summed和feature字段解释
  18. React Native 音频录制例子来解惑入门,真的已经讲烂了
  19. mac的防火墙工具pf
  20. 如何使用Github学生包申请JET BRAINS

热门文章

  1. 【5】数据结构与算法--- 算法 进阶
  2. Android之单元测试
  3. 【pytorch】yolov4 实现对蛾子数据集的识别 以及 对蛾子图片二值化处理 实现 自动打标签标注。(本文重点在自动实现将图片转化为voc数据集)
  4. 智慧CAD手机看图隐私政策
  5. html5火苗特效代码,视频添加火焰特效 视频画面中加动态的火苗效果
  6. 【系统设计】系统设计基础:速率限制器
  7. VS2010 MSDN安装
  8. 用GPIO模拟SPI接口读取传感器数据
  9. 随机变量与随机过程详解
  10. PreTranslateMessage和TranslateMessage区别