为什么我的JavaScript堆栈排序函数不起作用

Why does my JavaScript Stack Sort Function not work?

本文关键字:函数 不起作用 排序 堆栈 我的 JavaScript 为什么      更新时间:2023-09-26

这是我的代码:

 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/也就是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 stack?如果没有显式的return语句,函数在完成时将返回undefined

不,这只是锦上添花。事实上,这个代码中有几个逻辑错误:

  • insert()函数不向空堆栈插入值(x
  • topr()函数令人困惑。对于非空堆栈,它返回其最后一个元素(我想,只使用return stack[stack.length - 1]可以更有效地完成这一操作。但如果堆栈为空,它会向其推送undefined(因为这是pop空数组的结果)

正如raina77ow已经提到的,您的排序方法没有返回任何内容。然后,通过您的新更新,您只更新堆栈的本地版本;因此,如果您从排序方法返回stack,您应该会收到预期的结果。

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);