合并排序算法是用分而治之的策略实现对n个进行排序。

合并排序的基本思想:将需要排序的元素分成数量大概相等的2个子集合,分别给2个子集合进行排序,最终将2个排序好序的子集合合并成一个集合。

现比如有集合:{3, 1, 10, 2, 5, 4, 11, 33, 5}

分而治之:

首先先将元素分成大概数量相等的2个子集合,下面就是“分”的过程:

看上面的,可以深度为log2(n) = 4。

当分到最后只能一个元素时,则将两两子集合合并成一个集合,下面就是“治”的过程:

以下面这两个子集合作为例子,作为“治”的例子。

a[0] <= b[0],则将a[0]移到数组:

a的索引变为1。

a[1] > b[0],则将b[0]移到数组:

b的索引变为1。

a[1] <= b[1],则将a[1]移到数组:

a的索引变为2。

a[2] > b[1],则将b[1]移到数组:

b的索引变为2。

int[] b已经循环完了,则将int[] a的元素移到数组:

最后治到最后结果为:[1,2,3,5,10]

...

通过循环的“治”过程,最后得到排序的结果:[1,2,3,4,5,5,10,11,33]

合并排序的时间复杂度O(nlog2(n))

合并排序merge sort相关推荐

  1. c++归并排序_合并排序法

    一.合并排序(Merge Sort) 就是将多个有序数据表合并成一个有序数据表.如果参与合并的只有两个 有序表,那么称为二路合并.对于一个原始的待排序序列,往往可以通过分割的方法来归结为多路合 并排序 ...

  2. [转载] 算法导论:分治法,python实现合并排序MERGE-SORT

    参考链接: Python中的合并排序merge sort 1. 简单合并排序法实现 思想:两堆已排好的牌,牌面朝下,首先掀开最上面的两张,比较大小取出较小的牌,然后再掀开取出较小牌的那一堆最上面的牌和 ...

  3. 合并排序算法排序过程_合并排序| 用于大型输入的最佳排序算法之一

    合并排序算法排序过程 What is sorting? 什么是分类? Sorting allows us to process our data in a more organized and eff ...

  4. 算法:合并排序(Merge Sort)

    算法定义 合并排序是一种递归算法,思路如下: 如果源数组长度为 1,立即返回. 将源数组平分为两个新数组:Left 和 Right. 对 Left 执行递归排序. 对 Right 执行递归排序. 将排 ...

  5. C++Merege Sort合并排序的实现算法(附完整源码)

    C++Merege Sort合并排序的实现算法 C++Merege Sort合并排序的实现算法完整源码(定义,实现,main函数测试) C++Merege Sort合并排序的实现算法完整源码(定义,实 ...

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

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

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

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

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

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

  9. 排序算法研究之归并排序(Merge sort)

    前面几个小节,我们分别介绍了冒泡排序,插入排序,直接快速排序 ,选择排序 , 希尔排序, 堆排序本节,我们介绍基于归并操作的归并排序. 1.算法思想 归并排序是建立在归并操作上的一种有效的排序算法.该 ...

最新文章

  1. php学数据结构,PHP 程序员学数据结构与算法之《栈》
  2. 邓白氏码查询不能用_SQL多表查询
  3. abaqus python二次开发攻略_Abaqus有限元分析常见问题解答与实用技巧 12天后上架...
  4. OpenCV 3.1 imwrite()函数写入异常问题解决方法
  5. cpprestsdk编译安装linux,使用C++ REST SDK开发简单的Web(HTTP)服务
  6. pjk static tp.php,在测试服上偶然出现 Error: Loading chunk 5 failed.
  7. linux终端黑绿字配色方案注意事项
  8. 郑州超级计算机叫什么,国家超级计算郑州中心通过验收 2020超级计算机行业发展策略...
  9. mysql乘法函数_数据库入门(MySQL):mySQL运算符与mySQL常用函数
  10. C语言ctype常用方法
  11. 逻辑清晰四个实用原则(金字塔原理)
  12. omnet++tictoc2案例解析
  13. JAVA定义矩形类 方法二
  14. unix 创建html文件路径,Btrfs 创建目录和文件的操作
  15. 树梅派硬件学习_xbox手柄驱动
  16. 前端应该掌握的Mysql
  17. android view.isshown,android View.isShown() 和 getVisibility() 的区别
  18. .Net Core MVC引入static静态变量到.cshtml页面
  19. 电脑生成siri语音_给电脑里装个Siri!海尔智能语音系统体验
  20. 简析客户流失的原因及解决办法

热门文章

  1. 【MySQL】MySQL数据库安装方式之MSI安装,贼详细的安装过程
  2. 为什么说B2B企业的供给侧改革来源于“协同”?
  3. 转:优秀的管理者是下属的帮手
  4. 纯纯的css画美美的彩虹
  5. flocker resptapi curl 访问方法
  6. 虚拟社交、机器人、温柔触摸:人工智能正介入人类情感 | 观点
  7. 腾讯回应 CDC 部门解散:不涉及人员优化;苹果 iCloud+ 在全球多地宣布涨价 ;Wasmer 4.0 发布|极客头条
  8. Flutter shared_preferences使用
  9. 信必优成功案例-全球规模最大的银行及金融机构之一
  10. 在win10上安装go语言环境