代码:
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace 归并排序 { class Program { static void Main(string[] args) { int[] a = new int[] { 8, 4, 6, 3, 2, 1, 8, 5, 11, 25 }; Console.WriteLine("未排序之前的顺序:"); foreach (int s in a) { Console.WriteLine(" {0}", s); } int[] b = new int[10]; MergeSort(a, b, 0, a.Length-1 ); Console.WriteLine("排序之后的顺序:"); foreach (int s in a) { Console.WriteLine(" {0}", s); } Console.ReadKey(); } public static void MergeSort(int[] sourceArr, int[] tempArr, int startIndex, int endIndex) { int midIndex; if (startIndex < endIndex) { midIndex = (startIndex + endIndex) / 2; MergeSort(sourceArr, tempArr, startIndex, midIndex); MergeSort(sourceArr, tempArr, midIndex + 1, endIndex); Merge(sourceArr, tempArr, startIndex, midIndex, endIndex); } } public static void Merge(int[] sourceArr, int[] tempArr, int startIndex, int midIndex, int endIndex) { int L = startIndex, R = midIndex + 1, k = startIndex; while (L != midIndex + 1 && R != endIndex + 1) { if (sourceArr[L] >= sourceArr[R]) tempArr[k++] = sourceArr[R++]; else tempArr[k++] = sourceArr[L++]; } while (L != midIndex + 1)//某一方已经结束,合并另一方剩下所有 tempArr[k++] = sourceArr[L++]; while (R != endIndex + 1)//某一方已经结束,合并另一方剩下所有 tempArr[k++] = sourceArr[R++]; for (int i = startIndex; i <= endIndex; i++) sourceArr[i] = tempArr[i]; } } }就算明白了归并排序的原理,转化成代码的过程也没有想象中那么简单,做了一个小视频来演示以上代码在合并的时候是如何工作的,该视频还有一些瑕疵,并不能完全代表实际工作过程,仅用作参考。
http://v.youku.com/v_show/id_XMTQ4NDc5NTUzNg==.html
