归并排序 2016-12-30 20:17 208人阅读 评论(21) 收藏

研究僧考试考到了归并排序,当时做题的时候大概知道思路,结果没写上去,快气死了。。。下面总结一下归并排序。

原理

将序列每相邻两个数字进行归并操作(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的临时存储空间用以保存合并序列。

算法稳定性

在归并排序中,相等的元素的顺序不会改变,所以它是稳定的算法。

比较

若从空间复杂度来考虑:首选堆排序,其次是快速排序,最后是归并排序。
若从稳定性来考虑,应选取归并排序,因为堆排序和快速排序都是不稳定的。
若从平均情况下的排序速度考虑,应该选择快速排序。

这些排序我们都应该掌握,比较都是基础的排序。

原文地址:https://www.cnblogs.com/zhemeban/p/7183080.html