Javascript JS;有人能纠正我的快速排序功能吗?
我仍然难以使用递归调用。 我的函数超出了最大调用堆栈。需要帮忙吗Javascript JS;有人能纠正我的快速排序功能吗?,javascript,recursion,quicksort,Javascript,Recursion,Quicksort,我仍然难以使用递归调用。 我的函数超出了最大调用堆栈。需要帮忙吗 function quickSort(arr) { let n = arr[arr.length-1]; const inf = []; const sup = []; for(let i = 0; i<arr.length; i++){ if(arr[i]<= n){inf.push(arr[i])} else(sup.push(arr[i]));
function quickSort(arr) {
let n = arr[arr.length-1];
const inf = [];
const sup = [];
for(let i = 0; i<arr.length; i++){
if(arr[i]<= n){inf.push(arr[i])}
else(sup.push(arr[i]));
}
if(inf.length === 1 && sup.length === 1){
return inf.concat(sup)
}else if(inf.length === 1 && sup.length > 1){
quickSort(sup);
return inf.concat(sup)
}else if(inf.length > 1 && sup.length === 1){
quickSort(inf);
return inf.concat(sup)
}else{
quickSort(inf);
quickSort(sup);
return inf.concat(sup)
}
}
函数快速排序(arr){
设n=arr[arr.length-1];
常量inf=[];
常量sup=[];
for(设i=0;i 1&&sup.length==1){
快速排序(inf);
返回inf.concat(sup)
}否则{
快速排序(inf);
快速排序(sup);
返回inf.concat(sup)
}
}
谢谢。让我们以数组为例
arr=[3,2,7,5,4,6]
。
在第一个递归调用中
inf = [3,2,7,5,4,6]
sup = [7]
现在,由于sup.length===1
和inf.length>1
,执行将进入第三个if-else条件。在这个递归调用中,我们有
inf = [3,2,5,4,6] // Same as the original array sent into parameter
sup = []
这基本上属于无限递归调用循环
为了从这样的无限循环中恢复,您需要添加一个条件来检查inf.length==0
或sup.length==0
可能的解决方案:在for循环中,在最后一次迭代期间,您可以检查其中一个数组是否为空,并且由于最后一次迭代将始终导致相同的情况,即在上面的代码arr[i]=n
中,您可以将其推到空数组中,并继续执行进一步的if-else条件
考虑到前面的测试用例,在第二次迭代调用中,我将推动6
而不是inf[]
而是sup[]
生成inf[]
和sup[]
数组,如下所示:
inf = [3,2,5,4]
sup = [6]
这将解决无限循环问题。如果inf
或sup
为空,该怎么办?