为什么我的JavaScript堆栈排序函数不起作用
Why does my JavaScript Stack Sort Function not work?
这是我的代码:
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);
相关文章:
- Ember Data DS.Model's set函数不起作用
- 为什么我的JavaScript堆栈排序函数不起作用
- Javascript onchange()函数不起作用
- 另一个Ajax函数触发的Ajax函数不起作用
- 从PHP调用JS函数不起作用
- jQuery validate函数不起作用
- JS-窗口宽度函数不起作用
- javascript函数,该函数不起作用,但不会显示任何错误
- 为什么这个排序函数不起作用
- 为什么这个反向函数不起作用
- Javascript parseInt 函数不起作用
- 我的函数不起作用,Ajax调用,JQuery,调用外部?我不知道
- 主干构造函数不起作用
- Javascript:this.value 函数不起作用
- Mocha 的 beforeEach() 和 done() 函数不起作用
- 在jQuery中,我的函数不起作用
- jquery-ui-rails的draggable和dropable函数不起作用
- 数学函数不起作用
- Javascript-创建打印到HTML的函数不起作用
- 我上传了客户's服务器一个js函数不起作用