병합 정렬의 현재 위치 버전을 이해하는 데 어려움을 겪고 있습니다.현재 위치 병합 이해
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;
}
PARAMS의 전면에 0
및 items.length
를 추가하는 목적은 무엇인가? items.splice.apply
이 무슨 일을하는지 이해하지 못 하겠지만, 콘솔에서 몇 가지 예제를 로깅하면으로 변경되지 않은 부분 만 제거되는 것처럼 보입니다. 이것에 대한 이유는 무엇입니까?
현재 위치가 아닙니다. – user2357112
@ user2357112 내가 얻은 코드는 https://www.nczonline.net/blog/2012/10/02/computer-science-and-javascript-merge-sort/입니다. 이것은 내부 구현이라고 말합니다. – AlanH
... 그 블로그 게시물은 정확하게'unshift'와'splice' 물건이 무엇을 설명 하는지를 설명합니다. – user2357112