由于某种原因,下面的C#插入排序代码将返回索引超出范围的异常。我会尝试将每个变量写到控制台,但例外是不允许我这样做。我找不到解决方案,不胜感激。
using System;
using System.Collections.Generic;
class MainClass {
public static void Main (string[] args) {
int[] unsortedArray = {23, 19, 21, 44, 40, 60, 73, 80, 38, 55, 29, 78, 83, 61, 63, 9, 93, 6, 51, 11};
//Sets the unsorted list
Console.WriteLine ("Insertion Sort");
for (int i = 0; i < 20; i++) {
Console.Write(unsortedArray[i] + " , ");
}
//Displays a welcome message and the unsorted list
Console.WriteLine();
Console.WriteLine();
//Makes a gap between the unsorted and sorted list
List<int> sortedArray = new List<int>();
//Creates a new list for the sorted list
for (int i = 0; i < 19; i++) {
if (unsortedArray[i] < unsortedArray[i + 1]) {
sortedArray[i] = unsortedArray[i];
//If the next item in the unsorted list is less than or equal to the one after,
//it is added to the next spot in the sorted list.
}
else if (unsortedArray[i] > unsortedArray[i + 1]) {
sortedArray[i] = unsortedArray[i + 1];
//If the next item in the unsorted list is greater than the one after, it is
//moved behind one place and added to the sorted list before.
}
}
for (int i = 0; i < 19; i++) {
Console.Write(sortedArray[i] + ", ");
//Displays the sorted array
}
}
}
答案 0 :(得分:5)
这可能是您的错误:
List<int> sortedArray = new List<int>();
// ..
sortedArray[i] = // ..
在没有任何先前分配的情况下,无法为带有索引的List
分配值。您要么需要将列表更改为数组,要么使用add
。
也;您不应该将列表对象命名为“数组”,只会使人们感到困惑。
答案 1 :(得分:0)
如Alex Answer所述,您不能在没有任何先前分配的情况下将值分配给带有索引的列表。
此外,您的逻辑是完全错误的。 您需要2个循环。 第一个循环,迭代未排序数组的成员。 第二个循环,迭代已排序列表的成员。 请阅读更多here
算法如下。
For each element of the unsorted array
Find the position that the element in the sorted array (list in your case), by looping the sorted list and comparing the values
Push all the elements after that position, one index.
Insert the element in the position specified
我不会给您代码。虽然在链接中有针对c#的解决方案。但是,我建议您尝试通过了解算法来解决它
答案 2 :(得分:0)
也许您想出于学习目的编写自己的逻辑,但是:众所周知,该框架支持排序:
int[] unsortedArray = { 23, 19, 21, 44, 40, 60, 73, 80, 38, 55, 29, 78, 83, 61, 63, 9, 93, 6, 51, 11 };
List<int> sortedArray = new List<int>(unsortedArray);
sortedArray.Sort();