[英]Having a problem with my mergeSort implementation
我在執行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++;
}
}
問題出在merge
方法中。 你在索引上犯了一些錯誤。 我在下面的代碼中更正了它們
public static void merge(int[] arr, int[] left, int[] right, int left_length, int right_length){
int i = 0;//left
int j = 0; //right
int k = 0;
while(i<left_length && j < right_length){
if(left[i] < right[j]){
arr[k] = left[i];
k++;
i++;
}
else{
arr[k] = right[j];
k++;
j++;
}
}
while(i<left_length){
arr[k] = left[i];
k++;
i++;
}
while(j<right_length){
arr[k] = right[j];
k++;
j++;
}
}
merge
方法中的所有 3 個while
循環都使用了錯誤的索引變量。 第一個循環while (j < left_length && k < right_length) {
應該是
while (i < left_length && j < right_length) {
第二個循環while (j < left_length) {
應該是
while (i < left_length) {
最后,最后一個循環while (i < right_length) {
應該是
while (j < right_length) {
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.