在 java 中编写插入排序算法
Writing an algorithm for insertion sort in java
我正在尝试在 Java 中实现插入排序。我觉得我的代码不太对劲。
public int[] sort(int[] unsorted) {
int i, j, v;
for (i = 1; i < unsorted.length - 1; i++) {
v = unsorted[i];
j = i;
while (unsorted[j-1] > v && j >= 1) {
unsorted[j] = unsorted[j -1];
j--;
}
unsorted[j] = v;
}
return unsorted;
}
我的 while 循环 ([j-1])
得到一个 IndexOutOfBoundsException。但是我怎样才能重写代码使其真正起作用?
对于索引 i
,您可以简单地从 i-1
开始索引 j
。在 while 循环中,始终先检查索引有效性,然后再从该索引访问数据。以下代码解决了您的问题:
public int[] sort(int[] unsorted) {
int i, j, v;
for (i = 1; i < unsorted.length; i++) {
v = unsorted[i];
j = i - 1;
while (j >= 0 && unsorted[j] > v) {
unsorted[j + 1] = unsorted[j];
j--;
}
unsorted[j + 1] = v;
}
return unsorted;
}
我正在尝试在 Java 中实现插入排序。我觉得我的代码不太对劲。
public int[] sort(int[] unsorted) {
int i, j, v;
for (i = 1; i < unsorted.length - 1; i++) {
v = unsorted[i];
j = i;
while (unsorted[j-1] > v && j >= 1) {
unsorted[j] = unsorted[j -1];
j--;
}
unsorted[j] = v;
}
return unsorted;
}
我的 while 循环 ([j-1])
得到一个 IndexOutOfBoundsException。但是我怎样才能重写代码使其真正起作用?
对于索引 i
,您可以简单地从 i-1
开始索引 j
。在 while 循环中,始终先检查索引有效性,然后再从该索引访问数据。以下代码解决了您的问题:
public int[] sort(int[] unsorted) {
int i, j, v;
for (i = 1; i < unsorted.length; i++) {
v = unsorted[i];
j = i - 1;
while (j >= 0 && unsorted[j] > v) {
unsorted[j + 1] = unsorted[j];
j--;
}
unsorted[j + 1] = v;
}
return unsorted;
}