gpt4 book ai didi

c# - 递归方法的一部分可能不会在递归中执行

转载 作者:太空宇宙 更新时间:2023-11-03 23:36:10 25 4
gpt4 key购买 nike

我做了一个小项目来学习不同的排序算法。每个算法都使用相同的未排序数组作为基础。所以这意味着我每次都需要为每个算法复制那个数组。对于大多数运行良好的算法,但对于其中的 2 个(合并排序和快速排序),它不起作用,因为我递归地编写了它们。我试过这样:

public int[] MergeSort(int[] unsorted, bool copy, int right, int left = 0)
{
if (copy == true)
{
int[] toSort = new int[unsorted.Length];
Array.Copy(unsorted, toSort, unsorted.Length);
}

if (left < right)
{
int middle = (left + right) / 2;

MergeSort(toSort, false, middle, left);
MergeSort(toSort, false, right, middle + 1);

int[] leftArray = new int[middle - left + 1];
int[] rightArray = new int[right - middle];

Array.Copy(toSort, left, leftArray, 0, middle - left + 1);
Array.Copy(toSort, middle + 1, rightArray, 0, right - middle);

int i = 0;
int j = 0;
for (int k = left; k < right + 1; k++)
{
if (i == leftArray.Length)
{
toSort[k] = rightArray[j];
j++;
}
else if (j == rightArray.Length)
{
toSort[k] = leftArray[i];
i++;
}
else if (leftArray[i] <= rightArray[j])
{
toSort[k] = leftArray[i];
i++;
}
else
{
toSort[k] = rightArray[j];
j++;
}
}
}
return toSort;
}

当然:我收到以下错误:

The name 'ToSort does not exist in the current context.

我已经看这个太久了,我再也看不到了。

如果我将整个副本内容排除在外,该算法确实有效。

最佳答案

您正在 if 范围内创建局部变量 toSort:

if (copy == true)
{
int[] toSort = new int[unsorted.Length];
Array.Copy(unsorted, toSort, unsorted.Length);
}

一旦超出范围(在 ),toSort 变量将不复存在。
您必须在范围之外定义它才能在范围之外使用它。

关于c# - 递归方法的一部分可能不会在递归中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30516390/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com