我想知道为什么我在递归快速排序算法中遇到无限循环
当我尝试运行return语句return (quicksort(less).concat([swapPos], quicksort(more))
时,它进入一个无限循环。
http://jsbin.com/uMAmIXA/1/edit
var quicksort = function (array) {
//base case
if (array.length <= 1) {
return array;
}
var pivot = Math.floor(((array.length - 1) / 2));
console.log(pivot);
var swapPos = array[pivot];
console.log(swapPos);
var less = [];
var more = [];
array = array.slice(0, swapPos).concat(array.slice(swapPos + 1));
// console.log(array);
for (i = 0; i < array.length; i++)
{
if (array[i] < swapPos) {
less.push(array[i]);
}
else {
more.push(array[i]);
}
}
//console.log(more);
// console.log(less);
// return (quicksort(less).concat([swapPos], quicksort(more)));
};
quicksort([19, 12, 44, 2, 1, 7, 85, 22, 5, 4, 3]);
答案 0 :(得分:2)
array = array.slice(0,swapPos).concat(array.slice(swapPos+1));
我认为这应该是支点而不是swapPos。另外,我认为你应该交换他们的名字。