// на вход подаются уже отсортированные левая и правая части
functionmerge(left,right){
// сюда будем складывать результат
constarr=[];
// пока в каждой части есть хотя бы один элемент — выполняем цикл
while(left.length&&right.length){
// смотрим на наименьший элемент из тех, что стоят в начале обоих массивов
if(left[0]<right[0]){
// если слева был элемент меньше —
// забираем его оттуда и отправляем в массив с результатом
arr.push(left.shift());
}else{
// в противном случае забираем элемент из правой части
arr.push(right.shift());
}
}
// выводим результат слияния отсортированных массивов
//console.log("Результат: " + arr);
// возвращаем отсортированный массив и добавляем к нему в конец отсортированный остаток от какой-либо части, если её так и не обработали в цикле
return[...arr,...left,...right];
}
// делим массивы пополам до тех пор, пока в них не останется элементов
functionmergeSort(array){
// находим середину
consthalf=array.length/2;
// если в нашем массиве и так меньше двух элементов — возвращаем его
if(array.length<2){
returnarray;
}
// делим массив на две части и левую отправляем в новый массив
constleft=array.splice(0,half);
// выводим промежуточный результат
//console.log("Слева:" + left);
//console.log("Справа:" + array);
// запускаем рекурсию и отдаём ей правую и левую части массива
returnmerge(mergeSort(left),mergeSort(array));
}
array=[3,5,1,6,9,8,2]
mergeSort(array)
Purpose-built for displays of data
Observable is your go-to platform for exploring data and creating expressive data visualizations. Use reactive JavaScript notebooks for prototyping and a collaborative canvas for visual data exploration and dashboard creation.