Я сейчас изучаю алгоритмы, в частности сортировку слиянием. У меня возникла проблема, пытаясь понять, как этот поток кода работает в отношении вызова функции, которая принимает две рекурсивные функции в качестве входных данных. Код выглядит следующим образом:
const merge=(left,right)=>{
//console.log(left,right)
let sorted=[]
let leftIndex=0
let rightIndex=0
while(leftIndex<left.length && rightIndex<right.length){
if(left[leftIndex] < right[rightIndex]){
sorted.push(left[leftIndex])
leftIndex++
}
else{
sorted.push(right[rightIndex])
rightIndex++
}
}
return sorted.concat(left.slice(leftIndex).concat(right.slice(rightIndex)))
}
const mergeSort=(arr1)=>{
if(arr1.length <= 1){
return arr1
}
let mid= Math.floor(arr1.length/2)
let left=arr1.slice(0,mid)
let right=arr1.slice(mid)
return merge(mergeSort(left),mergeSort(right))
}
mergeSort(arr1)
Не уверен, что именно происходит с массивом в точке, где вызывается merge (mergeSort (слева), mergeSort (справа)), возвращает ли он 2 и 4 и передает его в функцию слияния, затем верните обратно с отсортированным массивом [2,4], затем сделайте то же самое с 9,10? Спасибо за любую помощь в объяснении этого потока кода.