为什么我的JavaScript堆栈排序函数不起作用?
这是我的密码:为什么我的JavaScript堆栈排序函数不起作用?,javascript,sorting,stack,Javascript,Sorting,Stack,这是我的密码: function sort(stack){ if(stack.length > 0){ var x = stack.pop(); sort(stack); insert(x,stack); } } function insert(x,stack){ if(stack.length>0){ var tops = topr(stack); if(tops>x){ stack.pop(); ins
function sort(stack){
if(stack.length > 0){
var x = stack.pop();
sort(stack);
insert(x,stack);
}
}
function insert(x,stack){
if(stack.length>0){
var tops = topr(stack);
if(tops>x){
stack.pop();
insert(x,stack);
stack.push(tops);
}else{
stack.push(x);
}
}
}
function topr(stack){
var t = stack.pop();
stack.push(t);
return t;
}
var stack = [1,3,2];
sort(stack);
console.log(stack);
我必须在不使用数组(递归)的情况下构建它。
但它在控制台中返回void/aka nothing
编辑:
完整的工作解决方案:
function sort(stack) {
if(stack.length > 0) {
var x = stack.pop();
sort(stack);
insert(x,stack);
}
return stack;
}
function insert(x,stack){
if(stack.length>0){
var tops = topr(stack);
if(tops>x){
stack.pop();
insert(x,stack);
stack.push(tops);
}else{
stack.push(x);
}
}else{
stack.push(x);
}
}
function topr(stack){
var t = stack.pop();
stack.push(t);
return t;
}
var stack = [1,3,2];
stack = sort(stack);
console.log(stack);
因为它的末尾可能没有返回堆栈
?如果没有显式的return
语句,函数将在完成时返回undefined
不,那只是蛋糕上的糖霜。事实上,此代码中有几个逻辑错误:
函数不向空堆栈插入值(insert()
)x
函数令人困惑。对于非空堆栈,它返回其最后一个元素(我想,只需使用topr()
就可以更有效地执行此操作。但如果堆栈为空,它会将返回堆栈[stack.length-1]
推送到它(因为它是未定义的
空数组的结果)弹出的
function sort(stack) {
if(stack.length > 0) {
var x = stack.pop();
stack = sort(stack);
insert(x,stack);
}
return stack;
}
var stack = [1,3,2];
stack = sort(stack);
console.log(stack);
我更新了我的答案。我没有注意到您在sort方法中再次调用了sort。您很可能还需要从其他函数返回值。我将继续研究这个问题。谢谢Josh!我怀疑JavaScript可能不适合这种递归操作(可能指针被某种垃圾收集器删除了)不,我很确定javascript可以很好地处理这个问题。你对它的理解似乎有点错误。你是在为堆栈排序吗?JS中堆栈和数组之间的唯一区别是可靠性。如果你把它扔掉,你可能只是在使用数组。@cHao,我这样做不是为了生产,而是为了我对堆栈。然后理解这一点:堆栈不需要,甚至不应该有排序功能。这会把堆栈的堆栈性搞得一塌糊涂。它们唯一能做的就是推、弹出,甚至可能偷看顶部的元素。哦,也许还能计算出其中有多少个元素。@cHao正是如此。)我想用这个更新我的答案,但我想你的评论在这里很好。虽然有优先级队列这样的东西,“优先级堆栈”根本没有意义。topr函数是可以的,因为它在长度if内调用。但是解决方案是:“else{stack.push(x);}”谢谢!