【发布时间】:2016-05-07 17:33:06
【问题描述】:
我正在尝试理解插入排序。我听说我可以用哨兵改进它。
这是我没有标记的代码:
public static int[] insertionSort(int[] sortieren) {
int temp;
for (int i = 1; i < sortieren.length; i++) {
temp = sortieren[i];
int j = i;
while (j > 0 && sortieren[j - 1] > temp) {
sortieren[j] = sortieren[j - 1];
j--;
}
sortieren[j] = temp;
}
return sortieren;
}
我目前正在尝试了解在哪种情况下我可以获得 ArrayIndexOutOfBounds 异常。你能帮我理解为什么需要一个哨兵来改进该代码,以及我必须在哪里输入它?我会说我必须在数组的左边缘放置一个 Integer.MIN_Value 但我不确定,因为我没有看到它用完数组的情况。
如果您能帮助我了解插入排序中哨兵的用法,我将不胜感激。
使用 Sentinel...
public void insertionSort(int[] array) {
int temp;
int arraySentinel[] = new int[array.length+1];
for(int i = 0; i < array.length; i++){
arraySentinel[i+1] = array[i];
}
arraySentinel[0] = Integer.MIN_VALUE;
for (int i = 1; i < arraySentinel.length; i++) {
temp = arraySentinel[i];
int j = i;
/**
* Stabil weil sortieren[j-1] > temp!
* Wäre nicht stabil wenn >=!
*/
while (arraySentinel[j - 1] > temp) {
arraySentinel[j] = arraySentinel[j - 1];
j--;
}
arraySentinel[j] = temp;
}
for (int i = 1; i < arraySentinel.length; i++){
array[i-1] = arraySentinel[i];
}
}
【问题讨论】:
标签: java algorithm insertion-sort sentinel