每日一题之归并排序
归并排序
1、归并排序原理
归并排序(Merge Sort)是建立在归并操作上的一种有效,稳定的排序算法,该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。若将两个有序表合并成一个有序表,称为二路归并。
简单来说就是把数组从中间划分为两个子数组,一直递归地把子数组划分成更小的数组,直到子数组里面只有一个元素的时候开始排序。排序的方法就是按照大小顺序合并两个元素。接着依次按照递归的顺序返回,不断合并排好序的数组,直到把整个数组排好序。
2、归并排序的步骤
3、归并排序的代码演示
- java
1 |
|
- C++
1 |
|
- 作者测试
1 |
|
4、归并排序的算法分析
归并排序是稳定排序,它也是一种十分高效的排序,能利用完全二叉树特性的排序一般性能都不会太差。java中Arrays.sort()
采用了一种名为TimSort
的排序算法,就是归并排序的优化版本。从上文的图中可看出,每次合并操作的平均时间复杂度为O(n)
,而完全二叉树的深度为|log2n|
。总的平均时间复杂度为O(nlogn)
。而且,归并排序的最好,最坏,平均时间复杂度均为O(nlogn)
。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!