Ich habe Probleme, die In-Place-Version von merge sort zu verstehen.Understanding 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;
}
Was ist der Zweck 0
und items.length
an der Vorderseite des params der Zugabe? Ich verstehe nicht, was items.splice.apply
tut, aber von der Konsole Protokollierung einige Beispiele, es sieht aus wie es nur entfernt, was auf params
unverschoben wurde. Was ist der Grund dafür?
Das ist nicht an Ort und Stelle. – user2357112
@ user2357112 Der Code, von dem ich das habe, ist https://www.nczonline.net/blog/2012/10/02/computer-science-and-javascript-merge-sort/. Es besagt, dass dies eine Implementierung vor Ort ist. – AlanH
... dieser Blog-Beitrag erklärt * genau * was das 'unshift' und' splice' Zeug macht. – user2357112