C# 秒表显示错误的时间?
但它的输出与此相近:C# 秒表显示错误的时间?,c#,C#,但它的输出与此相近: randomArray = randomizedArray (Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text)); randomArrayGnome = randomArray; randomArrayBubble = randomArray; randomArrayIns
randomArray = randomizedArray
(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
randomArrayGnome = randomArray;
randomArrayBubble = randomArray;
randomArrayInsertion = randomArray;
GnomeSort(randomArray);
BubbleSort(randomArrayBubble);
但是如果我切换呼叫顺序,时间会截然不同,而气泡排序可能需要6秒钟。这里发生了什么?为什么排序不正确?您的问题在于数组的初始化。如图所示:
Gnome Sorting completed, total time taken 00:00:02.5419864
Bubble Sorting completed, total time taken 00:00:00.0003556
上面的代码创建了四个变量,它们都引用相同的数组。因此,第一个排序算法对数组进行排序,后续算法将遇到一个已排序的数组,因此执行速度非常快
简单的解决方案是使用Linq-ToList克隆阵列:
randomArray = randomizedArray
(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
randomArrayGnome = randomArray;
randomArrayBubble = randomArray;
randomArrayInsertion = randomArray;
您的问题在于数组的初始化。如图所示:
Gnome Sorting completed, total time taken 00:00:02.5419864
Bubble Sorting completed, total time taken 00:00:00.0003556
上面的代码创建了四个变量,它们都引用相同的数组。因此,第一个排序算法对数组进行排序,后续算法将遇到一个已排序的数组,因此执行速度非常快
简单的解决方案是使用Linq-ToList克隆阵列:
randomArray = randomizedArray
(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
randomArrayGnome = randomArray;
randomArrayBubble = randomArray;
randomArrayInsertion = randomArray;
randomary
和randomArrayGnome
都包含对randomizedaray
的引用
当你打电话的时候
randomArray = randomizedArray
(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
randomArrayGnome = randomArray.ToList();
引用数组已排序,BubbleSort
正在处理已排序的数组
您可以使用
Array.Clone()
创建四个不同的引用 随机数组
和随机数组名称
都包含对随机数组
的引用
当你打电话的时候
randomArray = randomizedArray
(Convert.ToInt32(textBox1.Text), Convert.ToInt32(textBox2.Text));
randomArrayGnome = randomArray.ToList();
引用数组已排序,BubbleSort
正在处理已排序的数组
您可以使用Array.Clone()
创建四个不同的引用