原理,把原始数组分成若干子数组,对每一个子数组进行排序,

继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组

举例

无序数组[6 2 4 1 5 9]

先看一下每个步骤下的状态,完了再看合并细节

第一步 [6 2 4 1 5 9]原始状态

第二步 [2 6] [1 4] [5 9]两两合并排序,排序细节后边介绍

第三步 [1 2 4 6] [5 9]继续两组两组合并

第四步 [1 2 4 5 6 9]合并完毕,排序完毕

输出结果[1 2 4 5 6 9]

合并细节

详细介绍第二步到第三步的过程,其余类似

第二步:[2 6] [1 4] [5 9]

两两合并,其实仅合并[2 6] [1 4],所以[5 9]不管它,

原始状态

第一个数组[2 6]

第二个数组[1 4]

--------------------

第三个数组[...]

第1步,顺序从第一,第二个数组里取出一个数字:2和1

比较大小后将小的放入第三个数组,此时变成下边这样

第一个数组[2 6]

第二个数组[4]

--------------------

第三个数组[1]

第2步,继续刚才的步骤,顺序从第一,第二个数组里取数据,2和4,

同样的比较大小后将小的放入第三个数组,此时状态如下

第一个数组[6]

第二个数组[4]

--------------------

第三个数组[1 2]

第3步,再重复前边的步骤变成,将较小的4放入第三个数组后变成如下状态

第一个数组[6]

第二个数组[...]

--------------------

第三个数组[1 2 4]

第4步,最后将6放入,排序完毕

第一个数组[...]

第二个数组[...]

--------------------

第三个数组[1 2 4 6]

[ 1 2 4 6 ]与[ 5 9 ]的合并过程与上边一样,不再分解

代码仅供参考

        static void merge(int[] unsorted, int first, int mid, int last, int[] sorted){int i = first, j = mid;int k = 0;while (i < mid && j < last)if (unsorted[i] < unsorted[j])sorted[k++] = unsorted[i++];elsesorted[k++] = unsorted[j++];while (i < mid)sorted[k++] = unsorted[i++];while (j < last)sorted[k++] = unsorted[j++];for (int v = 0; v < k; v++)unsorted[first + v] = sorted[v];}static void merge_sort(int[] unsorted, int first, int last, int[] sorted){if (first + 1 < last){int mid = (first + last) / 2;Console.WriteLine("{0}-{1}-{2}", first, mid, last);merge_sort(unsorted, first, mid, sorted);merge_sort(unsorted, mid, last, sorted);merge(unsorted, first, mid, last, sorted);}}static void Main(string[] args){int[] x = { 6, 2, 4, 1, 5, 9 };int[] sorted = new int[x.Length];merge_sort(x, 0, x.Length, sorted);for (int i = 0; i < sorted.Length; i++){if (x[i] > 0)Console.WriteLine(x[i]);}Console.ReadLine();}

原文转自 http://www.cnblogs.com/kkun/archive/2011/11/23/merge_sort.html#3443947

转载于:https://www.cnblogs.com/happykoukou/p/5556754.html

归并排序Merge sort(转)相关推荐

  1. C语言以递归实现归并排序Merge Sort算法(附完整源码)

    以递归实现归并排序Merge Sort 以递归实现归并排序Merge Sort算法的完整源码(定义,实现,main函数测试) 以递归实现归并排序Merge Sort算法的完整源码(定义,实现,main ...

  2. C语言归并排序Merge Sort算法(附完整源码)

    归并排序Merge Sort 归并排序Merge Sort算法的完整源码(定义,实现,main函数测试) 归并排序Merge Sort算法的完整源码(定义,实现,main函数测试) #include ...

  3. 排序算法二:归并排序(Merge sort)

    归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 1 private void merge_sort(int[] array, i ...

  4. python选择排序算法图解_python基本算法之实现归并排序(Merge sort)

    0.前言 评判一个算法的好坏的标准: 时间复杂度 空间复杂度 1.归并排序算法是什么? 冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neuman ...

  5. python 归并排序算法_python基本算法之实现归并排序(Merge sort)

    0.前言 评判一个算法的好坏的标准: 时间复杂度 空间复杂度 1.归并排序算法是什么? 冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neuman ...

  6. 归并排序(merge sort)算法实现

    归并排序(merge sort)体现了分治的思想,即将一个待排序数组分为两部分,对这两个部分进行归并排序,排序后,再对两个已经排序好的数组进行合并.这种思想可以用递归方式很容易实现.归并排序的时间复杂 ...

  7. 归并python_python基本算法之实现归并排序(Merge sort)

    0.前言 评判一个算法的好坏的标准: 时间复杂度 空间复杂度 1.归并排序算法是什么? 冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neuman ...

  8. 经典排序算法 - 归并排序Merge sort

    经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 ...

  9. 归并有效排序算法matlab,科学网—[用MATLAB写算法]之排序算法2)归并排序merge sort - 徐勇刚的博文...

    归并排序(merge sort)是一种利用分治策略(divide and conquer)进行排序的算法,算法复杂度为 $\Theta (nlog_{2}n)$ . filename: merge_s ...

  10. python实现基本算法之归并排序(Merge sort)

    基本算法之归并排序(Merge sort) 基本算法-04.归并排序(Merge sort)算法 .往期请看选择排序,插入排序,归并排序,快速排序等等都发布的!欢迎大家批评指正! 文章目录 基本算法之 ...

最新文章

  1. c++构建工具之xmake使用实例
  2. STM32—— AHB、APB详解
  3. mybatis plus 事务管理器_[MyBatis]-02 环境搭建及配置文件详解
  4. htmlcss基础知识点表单
  5. oracle-扫盲贴:存储过程实现增删改查
  6. HTML ajax控件 目录树
  7. idea中将java项目中的单个类打包成jar包
  8. 广东工业大学计算机学院微信群,谢光强
  9. 4.1 深层神经网络
  10. 【安卓笔记】—— 页面导航 Navigation(2)
  11. u盘怎么重装系统win11教程
  12. linux文件及文件夹权限
  13. 【力扣 912】十大排序算法
  14. 修改Android emulator的IMEI
  15. 计算机入门在线阅读,计算机应用基础教程(Windows 7+Office 2010)
  16. 10个可以实现高效工作与在线赚钱的 AI 工具网站
  17. 设计师的AI自学之路:用图像识别玩忍术
  18. xPad该歇了,我们需要的只是小尺寸触控显示器
  19. 二十天前我亲手种下一颗种子:阿秀的校招笔记
  20. 宇视摄像机接存储卡是否支持热插拔?

热门文章

  1. 漫步数学分析十六——紧集与连集的像
  2. matlab几何计算程序集
  3. java if else程序,java – if then else条件评估
  4. Hash(散列)建表及查找
  5. 动态规划(装配线调度)
  6. 以太网接口MII,RMII,SMII,GMII总线接口简介
  7. python交互式绘图比较_python – 基于Tkinter和matplotlib的交互式绘图
  8. Linux awk的 if语句,AWK if(条件)语句与循环简介
  9. python *args用法_python函数参数*args**kwargs用法实例
  10. lsoci mysql_flask项目从sqlite3升级的mysql数据库