Я изо всех сил пытаюсь понять версию слияния на месте.Понимание на месте mergesort
function merge(left, right){
var result = [],
il = 0,
ir = 0;
while (il < left.length && ir < right.length){
if (left[il] < right[ir]){
result.push(left[il++]);
} else {
result.push(right[ir++]);
}
}
return result.concat(left.slice(il)).concat(right.slice(ir));
}
function mergeSort(items){
if (items.length < 2) {
return items;
}
var middle = Math.floor(items.length/2),
left = items.slice(0, middle),
right = items.slice(middle),
params = merge(mergeSort(left), mergeSort(right));
params.unshift(0, items.length);
items.splice.apply(items, params);
return items;
}
Какова цель добавления 0
и items.length
к передней части Params? Я не понимаю, что делает items.splice.apply
, но из консоли, введя несколько примеров, похоже, что он просто удаляет то, что было смещено на params
. Что является причиной этого?
Это не на месте. – user2357112
@ user2357112 Код, который я получил от https://www.nczonline.net/blog/2012/10/02/computer-science-and-javascript-merge-sort/. В нем говорится, что это реализация на месте. – AlanH
... что сообщение в блоге объясняет * точно * что делает 'unshift' и' splice'. – user2357112