Я работаю через введение в алгоритмы и перевод псевдокода на различные языки для практики.Объединить сортировку в javascript
Я застрял на javascript. Я не могу понять, почему моя функция слияния не работает и дублирует входные данные. Ты знаешь почему?
Спасибо
function mergesort(a){
if (a.length <=1) {
return a;
}
mid = Math.round((a.length/2));
left = a.slice(0, mid);
right = a.slice(mid);
console.log(left,right);
return merge(mergesort(left), mergesort(right));
}
function merge(left, right) {
sorted = [];
console.log(sorted,left, right, left[0], right[0]);
while (left && left.length >0 && right && right.length >0){
if (left[0] <= right[0]) {
sorted.push(left.shift());
console.log("left", left, right);
}
else {
sorted.push(right.shift());
console.log("left", left, right);
}
}
return sorted.concat(left,right);
}
a = [234,526,6,3,2,5];
mergesort(a);
Вы понимаете, что вы создаете глобальный 'sorted' переменную, не так ли? – thefourtheye
Также все переменные в 'mergesort' являются глобальными. Глобальные переменные и рекурсия обычно не смешиваются. – Barmar
Используйте 'var sorted' для предотвращения создания глобальных переменных. Все переменные глобальны по умолчанию в JS, если вы опустите ключевое слово 'var'. – Carpetsmoker