Я пытаюсь подстроить свою javascript + алгоритм игры. Я смотрю на эту реализацию быстрой сортировки на википедии: http://en.wikibooks.org/wiki/Algorithm_Implementation/Sorting/Quicksort#JavaScriptJavascript + Quicksort: как эта реализация википедии работает?
function qsort(a) {
if (a.length == 0) return [];
var left = [], right = [], pivot = a[0];
for (var i = 1; i < a.length; i++) {
a[i] < pivot ? left.push(a[i]) : right.push(a[i]);
}
return qsort(left).concat(pivot, qsort(right));
}
Я понимаю концепцию. Он рекурсивно разбивает исходный массив на более мелкие части и сортирует меньшие массивы. Однако я не вижу, как работает эта функция qsort
, когда она никогда не возвращает массивы влево/вправо (что-то вроде return leftArrayResult;
). Разве это не означает, что qsort всегда возвращает null
или пустой массив? Итак, qsort(left).concat(pivot, qsort(right)
всегда будет null.concat(pivot, null)
и поэтому никогда не работает?
Почему бы просто не дать ему массив образцов и записать значения, чтобы увидеть, как они работают? –
Он никогда не возвращает 'null'; он возвращает массив, который может быть или не быть пустым. –
Когда он достигнет длины 0, он вернет пустой массив. Оттуда все открытые стеки будут закрыты. Как вы видите, слева и справа переданы. Просто нарисуйте стеки самостоятельно с помощью примера – Arijoon