Алгоритмы
October 27, 2023
Сортировка слиянием ~
Алгоритм
- Исходный массив разделяется на две примерно равные части.
- Каждая часть сортируется отдельно.
- Каждая часть в свою очередь на две части, каждая из которых сортируется отдельно, а затем эти части вновь объединяются. Рекурсивное разделение осуществляется до тех пор, пока в каждой части не будет находиться всего один элемент – массив из одного элемента однозначно является отсортированным.
- Обе отсортированные части объединяются в один массив
Код
Слияние
Функция начинает с нулевых элементов обоих массивов, сравнивает их и находит минимальный. Для того массива, в котором нашелся минимум, активный индекс сдвигается вправо. Сравнения происходят пока один из массивов не закончится, тогда остаток другого просто присоединяется к результирующему массиву.
function merge(left, right) {
let arr = []
while (left.length && right.length) {
if (left[0] < right[0]) {
arr.push(left.shift())
} else {
arr.push(right.shift())
}
}
return [ ...arr, ...left, ...right ]
}Сортировка
Делит массив на две части, затем отправляет каждую часть на рекурсивную сортировку, а затем снова объединяет их с помощью функции merge.
function mergeSort(array) {
const half = array.length / 2
if(array.length < 2) {
return array
}
const left = array.splice(0, half)
return merge(mergeSort(left),mergeSort(array))
}October 27, 2023, 09:26
0 views
0 reactions
0 replies