Я думаю, что ваш алгоритм правильный, но вы могли сделать что-то не так при передаче аргументов
void sort(int arr[], int left, int right)
{
if (left < right) {
int m = (left + right) / 2;
sort(arr, left, m);
sort(arr, m + 1, right);
merge(arr, l, m, r);
}
}
static void printArray(int arr[])
{
int n = arr.length;
for (int i = 0; i < n; ++i)
System.out.print(arr[i] + " ");
System.out.println();
}
public static void main(String args[])
{
int arr[] = { 814, 137, 645, 135, 486, 981, 329, 472, 796, 233, 538, 836, 729, 739, 396, 556, 495, 375, 417, 772, 856, 485, 407, 100, 781, 209};
System.out.println("Given Array");
printArray(arr);
MergeSort ob = new MergeSort();
ob.sort(arr, 0, arr.length - 1);
System.out.println("\nSorted array");
printArray(arr);
}
}
Этот код + ваш код сортировки слиянием работал отлично. Так что любезно проверяйте сравнение аргументов при вызове функций sort () и mergesort () , и тогда вам будет хорошо go. Надеюсь, это поможет;)