介绍

归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。其排序的速度仅次于快速排序,时间复杂度O(n log n)。

Java代码实现

/*** 归并排序* @author rocky* @date 2021/9/10 10:34*/
public class MergeSort {public static int[] sort(int[] a, int low, int high) {int mid = (low + high) / 2;if (low < high) {// 左边归并排序sort(a, low, mid);// 右边归并排序sort(a, mid + 1, high);// 合并两个有序数组merge(a, low, mid, high);}return a;}public static void merge(int[] a, int low, int mid, int high) {int[] temp = new int[high - low + 1];int i = low;int j = mid + 1;int k = 0;while (i <= mid && j <= high) {// 对比大小,调整顺序if (a[i] < a[j]) {temp[k++] = a[i++];} else {temp[k++] = a[j++];}}// 右边剩余元素填充进temp中(因为前面已经归并,剩余的元素必会小于右边剩余的元素)while (i <= mid) {temp[k++] = a[i++];}// 右边剩余元素填充进temp中(因为前面已经归并,剩余的元素必会大于于左边剩余的元素)while (j <= high) {temp[k++] = a[j++];}// 调整数组顺序for (int x = 0; x < temp.length; x++) {a[x + low] = temp[x];}}public static void main(String[] args) {int[] a = {11, 6, 4, 7, 1, 31};sort(a, 0, a.length -1);Arrays.stream(a).forEach(System.out::println);}}
// 输出结果
1
4
6
7
11
31

Java排序算法(一)——归并排序相关推荐

  1. Java排序算法之归并排序

    基本思想: 归并排序利用分治法,先将一个序列分成一个个子序列,然后对子序列进行排序,再把有序子序列合并为整体有序序列. 图片来自于http://www.cnblogs.com/shudonghe/p/ ...

  2. java 排序算法总结,Java排序算法总结之归并排序

    本文实例讲述了Java排序算法总结之归并排序.分享给大家供大家参考.具体分析如下: 归并操作(merge),也叫归并算法,指的是将两个已经排序的序列合并成一个序列的操作.和快速排序类似,让我们一起来看 ...

  3. 排序算法:归并排序、快速排序

    相关博客: 排序算法:冒泡排序.插入排序.选择排序.希尔排序 排序算法:归并排序.快速排序 排序算法:桶排序.计数排序.基数排序 排序算法:堆排序 十大排序算法小结 一.归并排序: 1.工作原理: 归 ...

  4. Java十大排序算法总结,Java排序算法总结之冒泡排序

    本文实例讲述了Java排序算法总结之冒泡排序.分享给大家供大家参考.具体分析如下: 前言:冒泡排序(BubbleSort)就是依次比较相邻的两个数,将小数放在前面,大数放在后面. 下面让我们一起    ...

  5. 数据结构与算法:十大排序算法之归并排序

    数据结构与算法:十大排序算法之归并排序 package TopTenSortingAlgorithms;/*** 归并排序:Java** @author skywang* @date 2014/03/ ...

  6. Java排序算法:冒泡排序

    Java排序算法:冒泡排序 //创建数组并赋值int[] data = new int[] {11,10,55,78,100,111,45,56,79,90,345,1000};for(int i=0 ...

  7. 排序算法之--归并排序(好玩的一个算法o。o)快速入门

    排序算法之--归并排序(好玩的一个算法o.o) 下面是归并操作的基本思路(注意:是归并操作哦,不是归并排序哦) 归并操作的工作原理如下: 第一步:申请空间,使其大小为两个已经排序序列之和,该空间用来存 ...

  8. NOI提高级:排序算法之归并排序、快速排序

    图解排序算法(四)之归并排序 图解排序算法(四)之归并排序 - dreamcatcher-cx - 博客园 小学生图解排序算法:⑥归并排序 小学生图解排序算法:⑥归并排序_纯文笔记-CSDN博客_图解 ...

  9. Java排序算法之直接选择排序

    Java排序算法之直接选择排序 基本过程:假设一序列为R[0]~R[n-1],第一次用R[0]和R[1]~R[n-1]相比较,若小于R[0],则交换至R[0]位置上.第二次从R[1]~R[n-1]中选 ...

  10. java排序算法 sort_Java排序算法之SleepSort排序示例

    本文实例讲述了Java排序算法之SleepSort排序.分享给大家供大家参考,具体如下: 分享一个很有创意的排序算法:sleepSort .巧妙利用了线程的sleep(),代码如下: public c ...

最新文章

  1. android帧动画实现方法之一
  2. ProcessDialogKey 方法实现回车自动换行
  3. IDA动态调试技术及Dump内存
  4. css之左边div固定宽度右边div自适应布局
  5. codeblocks 汉化
  6. 拼多多token是什么?如何提取及写入?
  7. 解决CMU-15-213-ICS的部分lab在部分64位系统WSL中btest无法运行的问题
  8. r语言决策树c4.5案例,C4.5主要思想与决策树实例
  9. 阻容感基础01:从宇宙起源到阻容感(1)
  10. 利用Python实现Excel合并单元格
  11. 关于nova服务项目的使用方法
  12. python批量关键字百度搜索结果url解码
  13. 谈人生理想与个人实现
  14. 老夫带你深度剖析Redisson实现分布式锁的原理
  15. 第07课:技术精进之道
  16. 趣味编程:从字符串中提取信息
  17. Arcgis主页面字体太小
  18. win10下使用JMeter5进行压力测试
  19. SQL中UPDATE 语句
  20. 前端面试之手写代码篇

热门文章

  1. python3扬州大学校园网认证登录与下线
  2. matlab学习技巧
  3. JAVA发送邮件(163邮箱发送)
  4. 数学建模软件lingo的基本使用方法
  5. 软考-中级-网络工程师-2021年下半年-上午真题整理
  6. 虹软科技Java人脸识别_java人脸识别 虹软ArcFace 2.0,java SDK使用、人脸识别-抽取人脸特征并做比对...
  7. python快速搭建网页_使用python快速搭建HTTP服务实现局域网网页浏览或文件传输...
  8. mysql 服务器配置信息和运行状态的查看(show variables like)
  9. SQL数据导出至Excel
  10. 固高板卡mct2008调试轴回零_更新-LabVIEW固高函数库源码文档调试软件-2019年4月14日...