我正在c#中尝试插入排序算法并努力修复此错误消息:
" System.IndexOutOfRangeException'发生在algorithmsAssignment.exe"
中
一旦到达while循环,代码就会中断并给我留言。任何帮助将不胜感激
(我必须做string.compare,因为我正在使用2D数组字符串。
static void insertionSort(int columnSort, bool accendingOrder)
{
int column = columnSort - 1;
int i, j;
for (i = 1; i < dataArray.GetLength(1); i++)
{
string key = dataArray[column, i];
j = i - 1;
/* Move elements of arr[0..i-1], that are
greater than key, to one position ahead
of their current position */
while (j >= 0 && string.Compare(dataArray[column, j - 1],
dataArray[j, column]) > 0)
{
dataArray[column, j + 1] = dataArray[column, j];
j = j - 1;
}
dataArray[column, j + 1] = key;
}
}
答案 0 :(得分:1)
在你的第一次迭代中:(i = 1)
string key = dataArray[column, i];
j = i - 1;
// J value is 0
while (j >= 0 && string.Compare(dataArray[column, j - 1], //Here, j - 1 = -1, since j = 0
....
....
我敢打赌你的指数超出了范围,因为指数-1不存在。
干杯
答案 1 :(得分:0)
因为你有这个条件,你会得到i = 1的错误:
j = i - 1; //j=0 for i=1
和while循环中的错误条件
while (j >= 0 && string.Compare(dataArray[column, j - 1],
dataArray[j, column]) > 0)
while循环dataArray[column, j - 1]
中的这种情况会抛出IndexOutOfRange
异常,因为
j-1=-1 for j=0