Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*
- Сортировка слиянием
- */
- const merge = (arrFirst, arrSecond) => {
- //console.log(23)
- const arrSort = [];
- let i = j = 0;
- // сравниваем два массива, поочередно сдвигая указатели
- while (i < arrFirst.length && j < arrSecond.length) {
- let arr;
- if (arrFirst[i] < arrSecond[j]) {
- arr = arrFirst[i++]
- } else {
- arr = arrSecond[j++]
- }
- arrSort.push(arr);
- }
- // обрабатываем последний элемент при разной длине массивов
- // и возвращаем один отсортированный массив
- return [
- ...arrSort,
- ...arrFirst.slice(i),
- ...arrSecond.slice(j)
- ];
- };
- const mergeSort = arr => {
- // Проверяем корректность переданных данных
- if (!arr || !arr.length) {
- return null;
- }
- //Если массив содержит один элемент просто возвращаем его
- if (arr.length <= 1) {
- return arr;
- }
- // Находим середину массива и делим его на два
- const middle = Math.floor(arr.length / 2);
- const arrLeft = arr.slice(0, middle);
- const arrRight = arr.slice(middle);
- // Для новых массивов снова вызываем сортировку,
- // сливаем их и возвращаем снова единый массив
- return merge(mergeSort(arrLeft), mergeSort(arrRight));;
- };
- console.log(mergeSort([-4, 1, Infinity, 3, 3, 0]))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement