博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
归并排序(转)
阅读量:5317 次
发布时间:2019-06-14

本文共 663 字,大约阅读时间需要 2 分钟。

转载自:https://www.cnblogs.com/chengxiao/p/6194356.html

归并排序(MERGE-SORT)是利用归并的思想实现的排序方法,该算法采用经典的分治(divide-and-conquer)策略(分治法将问题(divide)成一些小的问题然后递归求解,而治(conquer)的阶段则将分的阶段得到的各答案"修补"在一起,即分而治之)。

分而治之

   可以看到这种结构很像一棵完全二叉树,本文的归并排序我们采用递归去实现(也可采用迭代的方式去实现)。阶段可以理解为就是递归拆分子序列的过程,递归深度为log2n。

合并相邻有序子序列

  再来看看阶段,我们需要将两个已经有序的子序列合并成一个有序序列,比如上图中的最后一次合并,要将[4,5,7,8]和[1,2,3,6]两个已经有序的子序列,合并为最终序列[1,2,3,4,5,6,7,8],来看下实现步骤。

总结

归并排序是稳定排序,它也是一种十分高效的排序,能利用完全二叉树特性的排序一般性能都不会太差。java中Arrays.sort()采用了一种名为TimSort的排序算法,就是归并排序的优化版本。从上文的图中可看出,每次合并操作的平均时间复杂度为O(n),而完全二叉树的深度为|log2n|。总的平均时间复杂度为O(nlogn)。而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)。

转载于:https://www.cnblogs.com/ceceliahappycoding/p/10620224.html

你可能感兴趣的文章
深入浅出Mybatis系列(八)---mapper映射文件配置之select、resultMap[转]
查看>>
[转载]工作面试时最难的25个问题
查看>>
Test
查看>>
HMAC
查看>>
linux进阶命令2
查看>>
实训三(cocos2dx 3.x 打包apk)
查看>>
【基础操作】线性基详解
查看>>
Git删除分支/恢复分支
查看>>
IIS7中使用集成模式时出现HttpException
查看>>
NOI导刊模拟2—电话网络 解题报告
查看>>
【代码笔记】iOS-播放从网络上下载的语音
查看>>
c# 操作excle
查看>>
JDK中DNS缓存的分析
查看>>
Objective-C中的@property和@synthesize用法
查看>>
jsp连接数据库
查看>>
一位面试者提到直接调用vuex中mutations方法
查看>>
安装JDK
查看>>
semantic ui要装什么才能使用
查看>>
四叶草社交平台——十天冲刺(10)
查看>>
Linux 2.6 完全公平调度算法CFS(Completely Fair Scheduler)分析
查看>>