Я новичок в Java. Это мой код для сортировки слиянием, но он не дает мне благоприятных результатов. Может кто-нибудь объяснить, пожалуйста, какую ошибку я совершил?
public class Test {
public int arr[] = {5,7,8,4,3,2,6,1};
public static void main(String args[]) {
Test t = new Test();
System.out.println("Before sorting"+ Arrays.toString(t.arr));
t.mergeSort(t.arr);
System.out.println("After Sorting"+ Arrays.toString(t.arr));
}
public void mergeSort(int[] a){
int n = a.length;
if(n < 2)
return;
int m = n/2;
int[] left = new int[m];
int[] right = new int[n - m];
for(int i = 0;i < m;i++) {
left[i] = a[i];
}
for(int i = m;i < n;i++) {
right[i - m] = a[i];
}
mergeSort(left);
mergeSort(right);
merge(left,right,arr);
}
private void merge(int[] left, int[] right, int[] arr2) {
int n = left.length;
int m = right.length;
int i=0,j=0, k=0;
while(i < n && j < m) {
if(left[i] < right[j]) {
arr2[k] = left[i];
i++;
k++;
}
else {
arr2[k] = right[j];
j++;
k++;
}
}
while(i<n) {
arr2[k] = left[i];
i++;
k++;
}
while(j<m) {
arr2[k] = right[j];
j++;
k++;
}
}
}
Я не получаю отсортированный массив после реализации вышеуказанной программы. Похоже, он не возвращает объединенный массив. Я не могу выяснить проблему, и любая помощь будет оценена.