思路
我们这里介绍的是二路归并算法,它的核心是将一维数组中前后的两个有序的序列合并成一个有序序列的过程。归并排序只需要做两将事情:
- “分解”——将序列每次折半划分
- “合并”——将划分后的序列段两两合并成有序序列。
图示(参考链接)
代码实现
1 | #include <stdio.h> |
算法分析
设数列长为N,将数列分开成小数列一共要logN步,每步都是一个合并有序数列的过程,时间复杂度可以记为O(N),故一共为O(NlogN)。因为归并排序每次都是在相邻的数据中进行操作,所以归并排序在O(NlogN)的几种排序方法(快速排序,归并排序,堆排序)也是效率比较高的。但是平均来说还是快速排序比较好。