所以我写了一个测试代码(试图教自己如何制作排序算法),看起来像这样:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace ConsoleApp2
{
class Program
{
static string Compile (List<int> array)
{
string output = "";
foreach (var item in array)
{
output += item.ToString() + " ";
}
return output;
}
static List<int> InsertSort(List<int> listToSort)
{
List<int> deliverList = new List<int>();
deliverList = listToSort;
int j = 0;
int iterator = 0;
for (int i = 1; i < deliverList.Count; i++)
{
j = i;
while(j>0)
{
if(deliverList[j] < deliverList[j-1])
{
int temp = deliverList[j - 1];
deliverList[j - 1] = deliverList[j];
deliverList[j] = temp;
}
Console.WriteLine("Iteration #[" + iterator.ToString() + "]: " + Compile(deliverList));
iterator++;
j--;
}
}
return deliverList;
}
static void Main(string[] args)
{
List<int> unsorted = new List<int>();
List<int> sorted = new List<int>();
Random random = new Random();
for (int i = 0; i < 10; i++)
{
unsorted.Add(random.Next(0, 100));
}
sorted = InsertSort(unsorted);
Console.WriteLine("Unsorted Array: " + Compile(unsorted));
Console.WriteLine("Sorted Array: " + Compile(sorted));
Console.ReadKey();
}
}
}
出于某种原因,当我在&#34; sort&#34;上使用InsertSort方法时数组,&#34;未排序&#34;数组也被更改,输出排序的数组两次,不让我看到未排序的数组。 这里究竟发生了什么?
PS:编译只是一个简单的方法,可以将列表编译成一个字符串,其中的元素用空格分隔。
答案 0 :(得分:2)
您拥有代码deliverList = listToSort;
,使deliverList
引用与listToSort
相同的列表。他们成了同义词。
相反,你应该写:
List<int> deliverList = listToSort.ToList();
这将制作列表的副本 - 现在它们将是不同的。
您的代码现在将输出:
Iteration #[0]: 52 88 93 69 35 21 63 47 2 17 Iteration #[1]: 52 88 93 69 35 21 63 47 2 17 ... Iteration #[43]: 2 17 21 35 47 52 63 69 88 93 Iteration #[44]: 2 17 21 35 47 52 63 69 88 93 Unsorted Array: 88 52 93 69 35 21 63 47 2 17 Sorted Array: 2 17 21 35 47 52 63 69 88 93
答案 1 :(得分:-3)
你需要复制一份清单
List<int> deliverList = listToSort.Select(x=>x);