C# 函数编辑非';t传递到所述函数中
这是一个简单的开关盒。声明了两个数组,它们彼此完全独立。当我运行Merge和Treesort时,SorterDarrayAsc和SorterDarrayDesc与它们应该的一样。但是,当我运行气泡和插入时。SorterDarrayASC返回它最初应该返回的内容,但当降序排序完成时,SorterDarrayASC会因某种原因而改变。这里是一些截图。 bubblesort的代码:C# 函数编辑非';t传递到所述函数中,c#,arrays,C#,Arrays,这是一个简单的开关盒。声明了两个数组,它们彼此完全独立。当我运行Merge和Treesort时,SorterDarrayAsc和SorterDarrayDesc与它们应该的一样。但是,当我运行气泡和插入时。SorterDarrayASC返回它最初应该返回的内容,但当降序排序完成时,SorterDarrayASC会因某种原因而改变。这里是一些截图。 bubblesort的代码: 我解决这个问题的方法是改变线路 int[] sortedArrayAsc; int[]
我解决这个问题的方法是改变线路
int[] sortedArrayAsc;
int[] sortedArrayDesc;
switch (sortChoice)
{
case "1":
sortedArrayAsc = Sorts.Bubblesort(array, "asc");
sortedArrayDesc = Sorts.Bubblesort(array, "desc");
break;
case "2":
sortedArrayAsc = Sorts.InsertionSort(array, "asc");
sortedArrayDesc = Sorts.InsertionSort(array, "desc");
break;
case "3":
sortedArrayAsc = Sorts.MergeSort(array, "asc");
sortedArrayDesc = Sorts.MergeSort(array, "desc");
break;
case "4":
sortedArrayAsc = Sorts.PrintTree(array, "asc");
sortedArrayDesc = Sorts.PrintTree(array, "desc");
break;
default:
Console.WriteLine("Merge sort by default...");
sortedArrayAsc = Sorts.MergeSort(array, "asc");
sortedArrayDesc = Sorts.MergeSort(array, "desc");
break;
}
进入
似乎,
Bubblesort
和InsertionSort
方法有问题,请共享其代码我打赌这两个方法正在修改原始数组我怀疑您的冒泡排序和插入排序修改了现有数组,而不是创建新数组。我怀疑你的两个变量最终指向同一个数组。但是,如果没有看到这些方法,我们就无法真正判断。在参考类型和价值类型方面,您感觉如何?也许值得一读,但这两个数组不应该是独立的吗?我返回排序后的数组,它不应该修改未传入的现有数组。原因是在C#
中,数组始终是引用类型,两个数组之间的赋值y=x
只复制引用(内存位置),而不复制实际数据。解决方案是制作一个副本,这是您使用.Clone()
完成的,它在内部调用Array.copy()
。谢谢。我知道数组是引用,但我感兴趣的是,返回int[]的函数也是对现有数组的引用。他们一定都在看同一个记忆位置!谢谢:)旁注:较短的版本是Linqint[]sortedArray=x.ToArray()谢谢,德米特里,我会用它的
int[] sortedArray = x;
int[] sortedArray = (int[])x.Clone();