思路:采用分治思想
递归
public static void mergesort(int[] array,int first,int end,string order)
{
if (first < end)
{
int midindex = (first + end) / 2;
Console.WriteLine($"first:{first},end:{end},order:{order}");
mergesort(array, first, midindex,"pre");
mergesort(array, midindex + 1, end,"old");
MergeMethod(array,first,midindex,end);
}
else
{
Console.WriteLine($"first==end,{order}");
}
}
排序方法
public static void MergeMethod(int[] array,int first,int midindex,int end)
{
Console.WriteLine($"method:first:{first},end:{end}");
Console.WriteLine();
int[] temp = new int[end - first + 1];
15 int m = first;
16 int n = midIndex + 1;
17 int k = 0;
18 while (m <= midIndex && n < end)
19 {
20 if (inputAray[m] < inputAray[n])
21 {
22 temp[k] = inputAray[m];
23 k++;
24 m++;
25 }
26 else
27 {
28 temp[k] = inputAray[n];
29 k++;
30 n++;
31 }
32 }
33 while (m <= midIndex)
34 {
35 temp[k] = inputAray[m];
36 k++;
37 m++;
38 }
39 while (n < end)
40 {
41 temp[k] = inputAray[n];
42 k++;
43 n++;
44 }
45 for (k=0,m = first; m < end; k++,m++)
46 {
47 inputAray[m] = temp[k];
48 }
}
调用
public static void Main(string[] args)
{
int[] a ={ 11, 8, 3, 9, 7, 1, 2, 5 };
mergesort(a, 0, 7,"开始");
Console.ReadLine();
}
递归过程图解