Сортировка — ключевое понятие в компьютерных науках, необходимое для организации данных. Но среди всех остальных алгоритмов сортировки сортировка слиянием является одной из самых популярных. Это эффективный алгоритм сортировки общего назначения, который хорошо работает с большими наборами данных. В этом сообщении блога мы рассмотрим сортировку слиянием и способы ее реализации с помощью JavaScript.
Что такое сортировка слиянием?
Подобно алгоритму быстрой сортировки, сортировка слиянием — это алгоритм разделяй и властвуй, который делит входные данные на более мелкие части, сортирует их по отдельности, а затем объединяет их для получения окончательного отсортированного вывода. Алгоритм основан на концепции слияния двух отсортированных массивов в один отсортированный массив. Основная идея состоит в многократном разделении входного массива на две половины до тех пор, пока каждый подмассив не будет содержать только один элемент. Затем объедините подмассивы, сравнив первые элементы каждого подмассива и добавив меньший элемент в отсортированный выходной массив. Повторяйте этот процесс, пока все подмассивы не будут объединены в один отсортированный массив.
Как реализовать сортировку слиянием с помощью JavaScript?
Вот пошаговое руководство о том, как реализовать сортировку слиянием с помощью JavaScript:
Шаг 1: Создайте функцию для рекурсивного разделения входного массива на две половины.
javascriptCopy codefunction mergeSort(arr) { if (arr.length === 1) { return arr; } const middleIndex = Math.floor(arr.length / 2); const leftArr = arr.slice(0, middleIndex); const rightArr = arr.slice(middleIndex); return merge(mergeSort(leftArr), mergeSort(rightArr)); }
Функция mergeSort
принимает массив в качестве входных данных и проверяет, содержит ли массив только один элемент. Если это так, он возвращает массив, поскольку он уже отсортирован. Если нет, он разбивает массив на две половины с помощью метода slice
и рекурсивно вызывает mergeSort
для каждой половины. Функция merge
используется для слияния двух половин.
Шаг 2: Создайте функцию для объединения двух отсортированных массивов в один отсортированный массив.
function merge(leftArr, rightArr) { let result = []; let leftIndex = 0; let rightIndex = 0; while (leftIndex < leftArr.length && rightIndex < rightArr.length) { if (leftArr[leftIndex] < rightArr[rightIndex]) { result.push(leftArr[leftIndex]); leftIndex++; } else { result.push(rightArr[rightIndex]); rightIndex++; } } return result.concat(leftArr.slice(leftIndex)).concat(rightArr.slice(rightIndex)); }
Функция merge
принимает два отсортированных массива в качестве входных данных и инициализирует пустой массив для хранения отсортированного вывода. Затем он сравнивает первые элементы каждого массива и добавляет меньший элемент в выходной массив. Процесс продолжается до тех пор, пока все элементы одного массива не будут добавлены в выходной массив. Затем он объединяет оставшиеся элементы другого массива с выходным массивом.
Шаг 3: Протестируйте функцию с помощью примера входных данных.
const arr = [8, 4, 2, 7, 6, 1, 5, 3]; console.log(mergeSort(arr));
В этом примере мы создаем массив несортированных целых чисел и передаем его функции mergeSort
. На выходе будет отсортированный массив [1, 2, 3, 4, 5, 6, 7, 8]
.
Сортировка слиянием имеет временную сложность O(n log n) и является одним из самых быстрых алгоритмов сортировки для больших наборов данных. Это также стабильный алгоритм сортировки, что означает сохранение порядка одинаковых элементов. Реализация сортировки слиянием с использованием JavaScript относительно проста.