int[] input = [6,5,4,3,2,1]
mergeSort(input,0,input.length)
void mergeSort(int[] A,int p,int r){
if(p < r){
int q = (int) Math.floor((p+r)/2)
mergeSort(A,p,q)
mergeSort(A,q+1,r)
merge(A,p,q,r)
}
}
void merge(int[] A,int p,int q,int r){
int i = 0
int j = 0
int n1 = q - p + 1
int n2 = r - q
int[] L = new int[n1]
int[] R = new int[n2]
for(;i<n1;i++){ L[i] = A[p+i-1] }
for(;j<n2;j++){ R[j] = A[q+j] }
i = j = 0
for(int k = p; k < r; k++){
if(L[i] <= R[j]){ A[k] = L[i++] }
else{ A[k] = R[j++] }
}
}
Это прямая реализация сортировки слияния из книги Introduction to Algorithms
. Хотя он выглядит правильно, он заканчивается исключением ArrayIndexOutOfBounds
.Что случилось с этим слиянием?
Я пытался отладить его, но не смог. Я хотел бы знать, что происходит не так и как исправить.
Runnable Пример: http://ideone.com/GhuuSd
Везде вы запутались с индексами и пытается для доступа к элементам массива без проверки границ, вы возитесь с дьяволом. – Maroun
@MarounMaroun Вы исправили бы код? :) –
Разве вы не видите, из какой строки было исключено исключение? – Useless