归并排序Merge sort(转)
原理,把原始数组分成若干子数组,对每一个子数组进行排序,
继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组
举例
无序数组[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(转)相关推荐
- C语言以递归实现归并排序Merge Sort算法(附完整源码)
以递归实现归并排序Merge Sort 以递归实现归并排序Merge Sort算法的完整源码(定义,实现,main函数测试) 以递归实现归并排序Merge Sort算法的完整源码(定义,实现,main ...
- C语言归并排序Merge Sort算法(附完整源码)
归并排序Merge Sort 归并排序Merge Sort算法的完整源码(定义,实现,main函数测试) 归并排序Merge Sort算法的完整源码(定义,实现,main函数测试) #include ...
- 排序算法二:归并排序(Merge sort)
归并排序(Merge sort)用到了分治思想,即分-治-合三步,算法平均时间复杂度是O(nlgn). (一)算法实现 1 private void merge_sort(int[] array, i ...
- python选择排序算法图解_python基本算法之实现归并排序(Merge sort)
0.前言 评判一个算法的好坏的标准: 时间复杂度 空间复杂度 1.归并排序算法是什么? 冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neuman ...
- python 归并排序算法_python基本算法之实现归并排序(Merge sort)
0.前言 评判一个算法的好坏的标准: 时间复杂度 空间复杂度 1.归并排序算法是什么? 冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neuman ...
- 归并排序(merge sort)算法实现
归并排序(merge sort)体现了分治的思想,即将一个待排序数组分为两部分,对这两个部分进行归并排序,排序后,再对两个已经排序好的数组进行合并.这种思想可以用递归方式很容易实现.归并排序的时间复杂 ...
- 归并python_python基本算法之实现归并排序(Merge sort)
0.前言 评判一个算法的好坏的标准: 时间复杂度 空间复杂度 1.归并排序算法是什么? 冒泡排序(Bubble Sort)是一种建立在归并操作上面的一种有效的排序算法,由John von neuman ...
- 经典排序算法 - 归并排序Merge sort
经典排序算法 - 归并排序Merge sort 原理,把原始数组分成若干子数组,对每一个子数组进行排序, 继续把子数组与子数组合并,合并后仍然有序,直到全部合并完,形成有序的数组 举例 无序数组[6 ...
- 归并有效排序算法matlab,科学网—[用MATLAB写算法]之排序算法2)归并排序merge sort - 徐勇刚的博文...
归并排序(merge sort)是一种利用分治策略(divide and conquer)进行排序的算法,算法复杂度为 $\Theta (nlog_{2}n)$ . filename: merge_s ...
- python实现基本算法之归并排序(Merge sort)
基本算法之归并排序(Merge sort) 基本算法-04.归并排序(Merge sort)算法 .往期请看选择排序,插入排序,归并排序,快速排序等等都发布的!欢迎大家批评指正! 文章目录 基本算法之 ...
最新文章
- c++构建工具之xmake使用实例
- STM32—— AHB、APB详解
- mybatis plus 事务管理器_[MyBatis]-02 环境搭建及配置文件详解
- htmlcss基础知识点表单
- oracle-扫盲贴:存储过程实现增删改查
- HTML ajax控件 目录树
- idea中将java项目中的单个类打包成jar包
- 广东工业大学计算机学院微信群,谢光强
- 4.1 深层神经网络
- 【安卓笔记】—— 页面导航 Navigation(2)
- u盘怎么重装系统win11教程
- linux文件及文件夹权限
- 【力扣 912】十大排序算法
- 修改Android emulator的IMEI
- 计算机入门在线阅读,计算机应用基础教程(Windows 7+Office 2010)
- 10个可以实现高效工作与在线赚钱的 AI 工具网站
- 设计师的AI自学之路:用图像识别玩忍术
- xPad该歇了,我们需要的只是小尺寸触控显示器
- 二十天前我亲手种下一颗种子:阿秀的校招笔记
- 宇视摄像机接存储卡是否支持热插拔?
热门文章
- 漫步数学分析十六——紧集与连集的像
- matlab几何计算程序集
- java if else程序,java – if then else条件评估
- Hash(散列)建表及查找
- 动态规划(装配线调度)
- 以太网接口MII,RMII,SMII,GMII总线接口简介
- python交互式绘图比较_python – 基于Tkinter和matplotlib的交互式绘图
- Linux awk的 if语句,AWK if(条件)语句与循环简介
- python *args用法_python函数参数*args**kwargs用法实例
- lsoci mysql_flask项目从sqlite3升级的mysql数据库