Чтобы выполнить сортировку массива слиянием в Java, вы можете использовать следующие методы:
Метод 1: рекурсивный подход
public static void mergeSort(int[] arr) {
if (arr.length <= 1) {
return;
}
int mid = arr.length / 2;
int[] left = new int[mid];
int[] right = new int[arr.length - mid];
System.arraycopy(arr, 0, left, 0, left.length);
System.arraycopy(arr, mid, right, 0, right.length);
mergeSort(left);
mergeSort(right);
merge(arr, left, right);
}
public static void merge(int[] arr, int[] left, int[] right) {
int i = 0, j = 0, k = 0;
while (i < left.length && j < right.length) {
if (left[i] <= right[j]) {
arr[k++] = left[i++];
} else {
arr[k++] = right[j++];
}
}
while (i < left.length) {
arr[k++] = left[i++];
}
while (j < right.length) {
arr[k++] = right[j++];
}
}
Метод 2: итеративный подход
public static void mergeSortIterative(int[] arr) {
if (arr.length <= 1) {
return;
}
int n = arr.length;
for (int currSize = 1; currSize < n; currSize *= 2) {
for (int leftStart = 0; leftStart < n - 1; leftStart += 2 * currSize) {
int mid = Math.min(leftStart + currSize - 1, n - 1);
int rightEnd = Math.min(leftStart + 2 * currSize - 1, n - 1);
merge(arr, leftStart, mid, rightEnd);
}
}
}
public static void merge(int[] arr, int left, int mid, int right) {
int[] temp = new int[right - left + 1];
int i = left, j = mid + 1, k = 0;
while (i <= mid && j <= right) {
if (arr[i] <= arr[j]) {
temp[k++] = arr[i++];
} else {
temp[k++] = arr[j++];
}
}
while (i <= mid) {
temp[k++] = arr[i++];
}
while (j <= right) {
temp[k++] = arr[j++];
}
System.arraycopy(temp, 0, arr, left, temp.length);
}
Чтобы выполнить сортировку массива слиянием в Java, вы можете использовать либо рекурсивный, либо итеративный подход. Рекурсивный подход делит массив на половины до тех пор, пока каждый подмассив не будет содержать только один элемент, а затем объединяет их обратно в отсортированном порядке. Итеративный подход выполняет итерацию по массиву, объединяя подмассивы увеличивающегося размера, пока не будет отсортирован весь массив.