我的实现有一个越界错误 mergeSort
,我不知道为什么。这是确切的错误消息: Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 1 out of bounds for length 1"
以下是我对 mergeSort
:
public static void mergeSort(int[] arr, int n) {
if (n < 2) {
return;
}
int mid_index = n / 2;
int[] left = new int[mid_index];
int[] right = new int[n - mid_index];
for (int i = 0; i < mid_index; i++) {
left[i] = arr[i];
}
for (int i = mid_index; i < n; i++) {
right[i - mid_index] = arr[i];
}
mergeSort(left, mid_index);
mergeSort(right, n - mid_index);
merge(arr, left, right, mid_index, n - mid_index);
}
public static void merge(int[] arr, int[] left, int[] right, int left_length, int right_length) {
int i = 0;
int j = 0;
int k = 0;
while (j < left_length && k < right_length) {
if (left[i] < right[j]) {
arr[k] = left[i];
k++;
i++;
} else {
arr[k] = right[j];
k++;
j++;
}
}
while (j < left_length) {
arr[k] = left[i];
k++;
i++;
}
while (i < right_length) {
arr[k] = right[j];
k++;
j++;
}
}
2条答案
按热度按时间clj7thdc1#
问题出在
merge
方法。你在索引上犯了一些错误。我在下面的代码中更正了它们njthzxwz2#
全部3个
while
循环中的merge
方法使用了错误的索引变量。第一圈while (j < left_length && k < right_length) {
应该是第二个回路
while (j < left_length) {
应该是最后,最后一个循环
while (i < right_length) {
应该是