Алгоритмы

Расскажите про сортировку слиянием


Сортировка слиянием (Merge Sort) - это эффективный алгоритм сортировки, который использует принцип "разделяй и властвуй". Он разделяет массив на меньшие подмассивы, сортирует их отдельно, а затем объединяет их в отсортированный массив. Слияние работает за O(n), уровней всего log(n), поэтому асимптотика O(n*log(n)). Принцип работы сортировки слиянием следующий: 1. Разделяем исходный массив пополам, пока не достигнем базового случая, когда размер массива становится равным 1. 2. Рекурсивно сортируем каждую половину массива. 3. Объединяем отсортированные половины массива, сливая их в один отсортированный массив. Пример реализации сортировки слиянием на языке Java: public class MergeSort { public static void mergeSort(int[] arr, int left, int right) { if (left < right) { int mid = (left + right) / 2; mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); merge(arr, left, mid, right); } } public static void merge(int[] arr, int left, int mid, int right) { int n1 = mid - left + 1; int n2 = right - mid; int[] leftArray = new int[n1]; int[] rightArray = new int[n2]; for (int i = 0; i < n1; ++i) { leftArray[i] = arr[left + i]; } for (int j = 0; j < n2; ++j) { rightArray[j] = arr[mid + 1 + j]; } int i = 0, j = 0; int k = left; while (i < n1 && j < n2) { if (leftArray[i] <= rightArray[j]) { arr[k] = leftArray[i]; i++; } else { arr[k] = rightArray[j]; j++; } k++; } while (i < n1) { arr[k] = leftArray[i]; i++; k++; } while (j < n2) { arr[k] = rightArray[j]; j++; k++; } } public static void main(String[] args) { int[] arr = {64, 34, 25, 12, 22, 11, 90}; int n = arr.length; mergeSort(arr, 0, n - 1); System.out.println("Отсортированный массив:"); for (int i = 0; i < n; i++) { System.out.print(arr[i] + " "); } } } В данном примере мы сортируем массив целых чисел с помощью сортировки слиянием. После сортировки выводим отсортированный массив на экран. Сортировка слиянием обладает стабильностью и гарантирует время выполнения O(n log n), где n - количество элементов в массиве. Она хорошо подходит для сортировки больших массивов и обеспечивает стабильную производительность в худших случаях.


Копировать ссылку