请问一下这个插入排序的代码有没有什么问题啊,总感觉看起来怪怪的
```java
public static int[] getSortedArr(int[] arr) {
//复制数组
int[] sortedArr = new int[arr.length];
System.arraycopy(arr, 0, sortedArr, 0, arr.length);
//找到无序数据的开始索引
int startIndex = -1;
for (int i = 0; i < sortedArr.length; i++) {
if (sortedArr[i] > sortedArr[i + 1]) {
startIndex = i + 1;
break;
}
}
//循环次数
int times = sortedArr.length - startIndex;
for (int i = startIndex; i < startIndex + times; i++) {
for (int j = 0; j < i; j++) {
if (sortedArr[i - j] < sortedArr[i - 1 - j]) {
int temp = sortedArr[i - j];
sortedArr[i - j] = sortedArr[i - 1 - j];
sortedArr[i - 1 - j] = temp;
} else {
break;
}
}
}
return sortedArr;
}
```
是比较怪,找到所谓无序开始索引的操作,纯属多余
public static int[] getSortedArr(int[] arr) {
// 复制数组
int[] sortedArr = new int[arr.length];
System.arraycopy(arr, 0, sortedArr, 0, arr.length);
// 找到无序数据的开始索引
int startIndex = -1;
for (int i = 0; i < sortedArr.length - 1; i++) { // 修改点1:修正循环上限
if (sortedArr[i] > sortedArr[i + 1]) {
startIndex = i + 1;
break;
}
}
// 对无序部分进行插入排序
for (int i = startIndex; i < sortedArr.length; i++) { // 修改点2:修正循环起始位置
for (int j = 0; j < i - startIndex + 1; j++) { // 修改点3:修正内部循环条件
if (sortedArr[i - j] < sortedArr[i - 1 - j]) {
int temp = sortedArr[i - j];
sortedArr[i - j] = sortedArr[i - 1 - j];
sortedArr[i - 1 - j] = temp;
} else {
break;
}
}
}
return sortedArr;
}