Алгоритмы
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