这是我在写使用递归的方法实现插入排序遇到的问题,我最开始写的代码是:
static void insertSort(int[] arr, int k) {
// k 是索引
if (k==1){
return;
}
// 对前面的 k-1 个元素进行排序
insertSort(arr, k-1);
// 将位置 k-1 的元素插入到 排序好的部分
int currentValue = arr[k];
int index = k-1;
while (arr[index]>currentValue && index>-1) {
arr[index+1] = arr[index];
index--;
}
arr[index+1] = currentValue;
}
int[] myList = {2, 97, 31, 87, 13, 91, 42, 82, 94, 91};
int[] myList = {68, 71, 52, 33, 46, 19, 66, 64, 98, 51};
最开始我使用的是上面的数组运行是可以正确排序的,后来我使用下面的数组就出现了问题。
总是在 while 语句的地方报数组越界错误,并且 IDE 提示 index>-1 条件始终满足。
我最开始以为是 while 循环内部逻辑的问题,后来发现应该是逻辑与 && 执行顺序的问题。
Java A&&B
语句,首先执行 A ,如果 A 是 False,则不再执行 B。所以在上面的代码中,会先检查 arr[index] ,如果此时 index 已经越界就会出现错误,只需要把对 index 的检查放到前面就可以了。
所以在使用 && 的时候一定要注意执行顺序的问题,或者在 while 循环里面加一个 if-break 也是可以帮助我们注意这个顺序问题的。
网友评论