归并排序

   归并排序是建立在归并操作上的一种排序算法;它是将一个序列分成子序列,再对子序列进行归并排序,最后将子序列合并得到一个有序的序列。

   算法步骤:

     ● 把长度为n的序列分为两个长度为n/2的子序列;
     ● 对两个子序列分别进行归并排序;
     ● 合并子序列成一个有序序列。

代码实现:

package org.westos.mergesort;import java.util.Arrays;public class MergeSort2 {public static void main(String[] args) {int[] arr = new int[]{1,2,9,36,7,0,3};mergeSort(arr,0,arr.length-1);System.out.println(Arrays.toString(arr));}private static void mergeSort(int[] arr, int start, int end) {if (start < end){int middle = (start+end)/2;mergeSort(arr,start,middle);mergeSort(arr,middle+1,end);merge(arr,start,middle,end);}}private static void merge(int[] arr,int low,int middle,int high){//记录分区的下标int i = low;int j = middle+1;//新数组存储子序列的元素int[] newArr = new int[arr.length];// 新数组的下标从low开始int index = low;while (i <= middle && j <= high){//如果左边分区的元素小,先将它存入新数组if (arr[i] < arr[j]){newArr[index++] = arr[i++];}else{newArr[index++] = arr[j++];}}//将分区未循环到的元素直接存入新数组while (i <= middle){newArr[index++] = arr[i++];}while (j <= high){newArr[index++] = arr[j++];}//将新数组的元素遍历进原数组for (int k = low; k <= high; k++) {arr[k] = newArr[k];}}
}

执行结果:

数据结构和算法——八种常用的排序算法------归并排序相关推荐

  1. 八种常用的排序算法(转)

    下面要讲到的8种排序都属于内部排序,既在内存中完成,主要从理论原理方面来分析的.    插入排序 ①直接插入排序 例:六个数12 15 9 20  6 31 24 用直接插入排序,如下图: 思路: 第 ...

  2. 数据结构常考题 —— 八种经典内部排序算法

    经典排序算法 我们经典的排序有内部排序和外部排序,内部排序是数据记录在内存中进行排序,而外部排序是因排序的数据很大,一次不能容纳全部的排序记录,在排序过程中需要访问外存. 算法复杂度如下图: 下面我们 ...

  3. java语言冒泡排序法_Java实现八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序等...

    本文实现了八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序 首先是EightAlgorithms.java文件,代码如下: import jav ...

  4. 【Java】八个常用的排序算法:插入排序、冒泡排序、选择排序、希尔排序 、快速排序、归并排序、堆排序和LST基数排序

    这篇文章主要介绍了Java如何实现八个常用的排序算法:插入排序.冒泡排序.选择排序.希尔排序 .快速排序.归并排序.堆排序和LST基数排序,需要的朋友可以参考下 本文实现了八个常用的排序算法:插入排序 ...

  5. 视觉直观感受7种常用的排序算法

    1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  6. 视觉直观感受 7 种常用的排序算法

    2019独角兽企业重金招聘Python工程师标准>>> 1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较 ...

  7. 7 种常用的排序算法直观感受

    1. 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序 ...

  8. 几种常用的排序算法之JavaScript实现

    文章目录 插入排序 二分插入排序 选择排序 选择排序 冒泡排序 快速排序 堆排序 归并排序 桶排序 计数排序 插入排序 <html> <script> /* 1)算法简介插入排 ...

  9. 通过视觉直观感受7种常用的排序算法

    1 快速排序 介绍: 快速排序是由东尼·霍尔所发展的一种排序算法.在平均状况下,排序 n 个项目要Ο(n log n)次比较.在最坏状况下则需要Ο(n2)次比较,但这种状况并不常见.事实上,快速排序通 ...

  10. 算法基础:常用的排序算法知识笔记

    1.算法外排序分类 2.冒泡排序 冒泡排序(Bubble Sort)属于交换排序,它的原理是:循环两两比较相邻的记录,如果反序则交换,直到没有反序的记录为止. 实现算法: /** * 冒泡排序优化后的 ...

最新文章

  1. linux日志idProduct,linux – 机器ID是uuid吗?
  2. sql server 2008 64位连接sql 2000服务器出错解决办法
  3. 番茄花园 Ghost XP SP3 金秋国庆版 2013.AA0
  4. SQL Server2005重装Performance Monitor Counter 的问题解决
  5. 【概念原理】四种SQL事务隔离级别和事务ACID特性
  6. 奔跑吧linux内核_别了,Linux 的魔法时代!
  7. mysql数据库被远程连接_如何让mysql数据库准许被远程连接访问
  8. 《ArcGIS Runtime SDK for .NET开发笔记》--三维功能
  9. linux shell脚本监控进程崩溃自动重启
  10. 0. SQL Server监控清单
  11. 架构如何为业务和技术“服务”(2)
  12. 框架设计---主体函数
  13. qt超强精美绘图控件 - QCustomPlot一览
  14. 带着梦想,追逐属于你我的那份真彩
  15. matlab正激变换器,12个步骤设计恒流正激式开关电源
  16. 【Python】bar柱状(条形)图(带均值和标准差)
  17. APS的定义是什么?高级计划与排程APS有哪些痛点?
  18. 九城卷入仙境传说2网游私服风波
  19. 关于产品研发管理-《培思的力量》
  20. 【个人网站】个人网站搭建全过程

热门文章

  1. jar包引用版本不一致引发的问题
  2. 写得好 git 提交信息
  3. Unix/Linux环境C编程入门教程(24) MySQL 5.7.4 for Red Hat Enterprise 7(RHEL7)的安装
  4. Building beautiful User Interface in Android
  5. 转载:ASP.net页面跳转方式三种
  6. 【数据分享】维基百科Wiki负面有害评论(网络暴力)文本数据多标签分类挖掘可视化
  7. 拓端tecdat|R语言基于协方差的SEM结构方程模型中的拟合指数
  8. dedecms channel php,DedeCMS在{dede:channel}标签前加序列号
  9. milantgh php安全,PHP漏洞全解(一)-PHP网站的安全性问题
  10. cv2.error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wwma2wne\opencv\module