【发布时间】:2017-11-06 04:03:22
【问题描述】:
最终合并的输出是[0,0,0,0]。我认为它适用于数组左半部分的第一次合并,因为它正确排列。我想帮忙调试一下。
static public void Main(string[] args)
{
int[] input = { 4, 1, 3, 2};
MergeSort(input, 0, input.Length - 1);
for (int i = 0; i < input.Length; i++)
{
Console.WriteLine(input[i]);
}
Console.ReadLine();
}
static public void MergeSort(int[] input, int left, int right)
{
if (left < right)
{
int middle = (left + right) / 2;
MergeSort(input, left, middle);
MergeSort(input, middle + 1, right);
Merge(input, left, (middle + 1), right);
}
}
static public void Merge(int[] input, int left, int middle, int right)
{
int tempindex = left;
int[] tmp = new int[input.Length];
int rightpointer = middle + 1;
int leftpointer = left;
while (leftpointer <= middle && rightpointer <= right)
{
if (input[leftpointer] < input[rightpointer])
{
tmp[tempindex] = input[leftpointer];
leftpointer++;
}
else
{
tmp[tempindex] = input[rightpointer];
rightpointer++;
}
tempindex++;
}
while (leftpointer <= middle)
{
tmp[tempindex] = input[leftpointer];
leftpointer++;
tempindex++;
}
while (rightpointer <= right)
{
tmp[tempindex] = input[rightpointer];
right++;
tempindex++;
}
for (int i = 0; i < tmp.Length; i++)
{
input[i] = tmp[i];
}
}
【问题讨论】:
-
在调试器中单步执行代码时看到了什么?
-
提示:
for (int i = 0; i < tmp.Length; i++)- 这里有问题。 -
有许多在线资源可以帮助您,其中大多数都提供了足够体面的解释来说明它是如何完成的。一些示例:MergeSort.cs、Merge Sorting Algorithm in C# 和 C# - Sorting Algorithm - Merge Sort Recursive
-
老实说,我的大脑太疲惫了,我似乎找不到它。尝试将其更改为 for (int i = left; i