
Привет! Меня зовут Максим, и сегодня я хочу рассказать вам о сортировке слиянием в языке программирования Java. Этот алгоритм сортировки является одним из самых эффективных и широко используется в различных задачах.
Для начала, давайте создадим класс MergeSort и внутри него опишем метод mergeSort. Данный метод будет принимать в качестве параметра массив целых чисел и возвращать отсортированный массив.
public class MergeSort {
public static int[] mergeSort(int[] arr) {
if (arr.length < 1) {
return arr;
}
int midpoint arr.length / 2;
int[] left new int[midpoint];
int[] right;
if (arr.length % 2 0) {
right new int[midpoint];
} else {
right new int[midpoint 1];
}
// Заполняем левый и правый подмассивы
for (int i 0; i < midpoint; i ) {
left[i] arr[i];
}
for (int j 0; j < right.length; j ) {
right[j] arr[midpoint j];
}
int[] result new int[arr.length];
// Рекурсивно вызываем mergeSort для левого и правого подмассива
left mergeSort(left);
right mergeSort(right);
// Объединяем отсортированные подмассивы
result merge(left, right);
return result;
}
// Метод слияния двух подмассивов
public static int[] merge(int[] left, int[] right) {
int[] result new int[left.length right.length];
int leftPointer, rightPointer, resultPointer;
leftPointer rightPointer resultPointer 0;
while (leftPointer < left.length || rightPointer < right.length) {
if (leftPointer < left.length nn rightPointer < right.length) {
if (left[leftPointer] < right[rightPointer]) {
result[resultPointer ] left[leftPointer ];
} else {
result[resultPointer ] right[rightPointer ];
}
} else if (leftPointer < left.length) {
result[resultPointer ] left[leftPointer ];
} else if (rightPointer < right.length) {
result[resultPointer ] right[rightPointer ];
}
}
return result;
}
// Тестовый метод для проверки работы сортировки слиянием
public static void main(String[] args) {
int[] arr {5, 3, 8, 2, 1, 9, 4, 7, 6};
int[] sortedArr mergeSort(arr);
System.out.println(″Отсортированный массив⁚″);
for (int i 0; i < sortedArr.length; i ) {
System.out.print(sortedArr[i] ″ ″);
}
}
}
В данном примере мы создали класс MergeSort и внутри него определили метод mergeSort, который принимает массив целых чисел и рекурсивно вызывает сам себя для сортировки левого и правого подмассивов, а затем объединяет их с помощью метода merge. Метод merge также определен в классе и выполняет слияние двух подмассивов.
Чтобы проверить работу сортировки слиянием, мы создали метод main, в котором задали начальный неотсортированный массив и вызвали метод mergeSort для него. Затем вывели отсортированный массив на экран.
Надеюсь, эта статья была полезной для вас. Сортировка слиянием является очень эффективным алгоритмом, который может быть использован во множестве задач. Я сам многократно применял его на практике и всегда получал отличные результаты. Удачи вам в использовании этого алгоритма!