归并排序基本思想:
将已有序的子序列合并,得到完全有序的序列;即先使每个子序列有序,再使子序列段间有序。
对于一个无序序列来说(通常为一个数组),为得到有序子序列,通常将待排序序列R[0...n-1]看成是n个长度为1的有序序列,将相邻的有序表成对归并,得到n/2个长度为2的有序表;将这些有序序列再次归并,得到n/4个长度为4的有序序列;如此反复进行下去,最后得到一个长度为n的有序序列。该算法是采用分治法(Divide and Conquer)的一个非常典型的应用。若将两个有序表合并成一个有序表,称为二路归并。
综上可知:
归并排序其实要做两件事:
(1)“分解”——将序列每次折半划分。
(2)“合并”——将划分后的序列段两两合并后排序
由以上图解可知,子表个数为奇数,则最后一个子表无须和其他子表归并(即本趟处理轮空):若子表个数为偶数,则要注意到最后一对子表中后一个子表区间的上限为n-1。
图解图片来自http://blog.csdn.net/collonn/article/details/17581953
另外参考:
http://www.cnblogs.com/jingmoxukong/p/4308823.html
代码如下:
http://download.csdn.net/detail/mochounv/9691113
代码中的MergeSort(T[] source)。