【发布时间】:2019-10-04 11:24:10
【问题描述】:
我目前正在尝试使用合并排序对一些整数进行排序,但我的算法有问题。 我有一个较大的文件,其中包含我应该排序的整数,但我使用了一个较小的给定数组来检查它是否在对较大的文件进行排序之前工作。
我的 THIS 算法的输出是:1 2 2 2 4 5 6,但它应该是:1 2 4 5 6 9 10 ??
这是我得到的:
private static int[] data = new int[] { 1, 9, 10, 2, 4, 5, 6 };
static void Main(string[] args)
{
int N = data.Length;
Sort(data, 0, N - 1);
for (int i = 0; i < N; i++)
Console.WriteLine(data[i]);
}
private static void Merge(int[] intArray, int lo, int mid, int hi)
{
int i = lo;
int j = mid + 1;
if (intArray.Length != 0)
for (int k = lo; k <= hi; k++)
data[k] = intArray[k];
for (int k = lo; k <= hi; k++)
{
if (i > mid)
intArray[k] = data[j++];
else if (j > hi)
intArray[k] = data[i++];
else if (data[j] < data[i])
intArray[k] = data[j++];
else if (data[i] < data[j])
intArray[k] = data[i++];
}
}
private static void Sort(int[] intArray, int lo, int hi)
{
if (hi <= lo)
return;
int mid = lo + (hi - lo) / 2;
Sort(intArray, lo, mid);
Sort(intArray, mid + 1, hi);
Merge(intArray, lo, mid, hi);
}
【问题讨论】:
-
data[k] = intArray[k];--data和intArray是同一个数组,所以这一行什么也不做(它与data[k] = data[k]完全相同,因为@987654326 @ 指向与data相同的数组。我怀疑您的问题来自对 C# 引用类型如何工作的误解。 -
感谢您的回复!我想要在这部分实现的唯一一件事是,如果数组中只有 1 个或更少的元素,则无需再进行排序。那么它应该是相同的数组。如果我用 for 循环注释掉整个 if 语句,输出仍然是一样的。