归并排序
来源:互联网 发布:android源码在线 编辑:程序博客网 时间:2024/06/18 06:26
研究僧考试考到了归并排序,当时做题的时候大概知道思路,结果没写上去,快气死了。。。下面总结一下归并排序。
原理
将序列每相邻两个数字进行归并操作(merge),形成floor(n/2)个序列,排序后每个序列包含两个元素
将上述序列再次归并,形成floor(n/4)个序列,每个序列包含四个元素
重复步骤2,直到所有元素排序完毕
实例
假设有一组数字:9 1 5 3 4 2 6 8 7 ,使用归并排序来排序,结果如下:
第一遍:1 9 3 5 2 4 6 8 7
第二遍:1 3 5 9 2 4 6 8 7
第三遍:1 2 3 4 5 6 8 9 7
第四遍:1 2 3 4 5 6 7 8 9
完成。先是两两一组,然后四四一组,然后大家一起一组,排序完成。
复杂度等
时间复杂度
归并排序的形式就是一棵二叉树,它需要遍历的次数就是二叉树的深度,而根据完全二叉树的可以得出它的时间复杂度是O(n*log2n)。
空间复杂度
由前面的算法说明可知,算法处理过程中,需要一个大小为n的临时存储空间用以保存合并序列。
算法稳定性
在归并排序中,相等的元素的顺序不会改变,所以它是稳定的算法。
比较
若从空间复杂度来考虑:首选堆排序,其次是快速排序,最后是归并排序。
若从稳定性来考虑,应选取归并排序,因为堆排序和快速排序都是不稳定的。
若从平均情况下的排序速度考虑,应该选择快速排序。
这些排序我们都应该掌握,比较都是基础的排序。
1 0
- 归并排序-归并排序
- 归并和归并排序
- 归并与归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 排序::归并
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 归并排序
- 给App整体设置activity的进入退出动画
- 欢迎使用CSDN-markdown编辑器
- CAD快捷命令
- 获取单选框的值并判断
- Rust入门之一
- 归并排序
- POJ 2349 Arctic Network
- 64位win7安装Python3.5、Numpy和matplotlib的链接
- (转)Android开发:显式/隐式Intent意图跳转Activity总结
- 【Linux】Linux指令学习之find
- 由浪潮大型机M13说开去
- SimEvent怎么用?
- Android Studio 调试方法与技巧
- 创建dblink