排序之归并排序
阐述: 归并排序是将两个有序表合并成新的有序表; 而子序列的划分是递归地将待排序集合折半划分多个子序列,类似一个二叉树, 另外上面的递归操作大多会涉及分治思想,通俗讲就是各个分支上的子序列的有序,为最大的序列的有序埋下基础。 所以需要lgN趟的二路合并(假设集合的规模是N),每趟合并的复杂度是O(N),故其时间复杂度无论是在最好情况下还是在最坏情况下均是O(N*lgN)。 归并排序在划分子序列,二路合并有序集合时并没有改变两个相同元素的相对位置,故而是稳定的。 但是,归并排序需要额外的临时存储空间来暂存归并好的结果,所以空间复杂度是O(N)。 归并排序的关键字是:有序集合的合并;子序列的划分方式(如二路归并是通过递归地折半划分) 效果图: 大家可以看到处理每一趟归并的走位,就像我们遍历二叉树的顺序。 代码(c#): /// <summary> /// 归并排序入口 /// </summary> public static void DoMergeSort_Entrance() { List<int> listNum = new List<int>() { 25, 19, 6, 58, 34, 10, 7, 98, 160, 0 }; DoMergeSort_Sort(listNum, 0, listNum.Count - 1); } /// <summary> /// 归并排序,