运行此代码:
public static int[] insertionSort(int[] array) {
for (int j = 1; j < array.length; j++) {
int cur = array[j];
int prev = j - 1;
while ( (prev > -1) && (array[prev] > cur)) {
array[cur] = array[prev];
prev--;
}
array[prev + 1] = cur;
}
return array;
}
我在数组[cur] = array [prev];
上得到Indexoutofbounds错误这是我的测试用例:
int[] array = { 23, 5, 3, 5, 34, 2};
为什么会出错?我认为逻辑很好
答案 0 :(得分:3)
int cur = array[j];// So, 'cur' will have any number may be out of bound
在你的循环中,你正在使用array[cur] = array[prev];
并考虑cur = 23
超出界限。基本上,cur
意味着当前索引,但您将当前元素存储在其中。
答案 1 :(得分:1)
只需更改while循环,我希望这个工作正常。
while ((prev >= 0) && (array[prev] < cur))
{
array[prev + 1] = array[prev];
prev--;
}