Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用javascript对堆栈元素进行排序_Javascript_Sorting_Recursion_Stack - Fatal编程技术网

使用javascript对堆栈元素进行排序

使用javascript对堆栈元素进行排序,javascript,sorting,recursion,stack,Javascript,Sorting,Recursion,Stack,我试图理解使用中给出的递归对堆栈元素进行排序 不允许使用任何循环构造,如while、for..等。我们只能在堆栈S上使用以下ADT函数: is_empty(S):测试堆栈是否为空 推送:将新元素添加到堆栈中 pop(S):从堆栈中移除顶部元素 top(S):返回top元素的值。请注意 函数不会从堆栈中删除元素。 我在下面试过了,但出现了错误 var-stack=[-3,14,18,-5,30]; 函数sortStack(){ 如果(堆栈长度>0){ temp=stack.pop(); sort

我试图理解使用中给出的递归对堆栈元素进行排序
不允许使用任何循环构造,如while、for..等。我们只能在堆栈S上使用以下ADT函数:

is_empty(S):测试堆栈是否为空

推送:将新元素添加到堆栈中

pop(S):从堆栈中移除顶部元素

top(S):返回top元素的值。请注意 函数不会从堆栈中删除元素。 我在下面试过了,但出现了错误


var-stack=[-3,14,18,-5,30];
函数sortStack(){
如果(堆栈长度>0){
temp=stack.pop();
sortStack();
分拣机(温度、堆栈);
}
}
功能分拣机(元件、堆栈){
if(stack.length>0 | | element>stack[stack.length-1]){
堆栈推送(元素);
}否则{
temp=stack.pop();
分拣机(元件、堆栈);
堆栈推送(温度);
}
}
sortStack();

控制台日志(堆栈)如果只想对数组排序,可以使用方法。检查下面的示例:

var stack = [-3, 14, 18, -5, 30];
console.log(stack.sort());
如果您想了解如何手动排序数组,请查看(注意:下面的代码是从相同的ans复制的):

对于javascript,本地(作用域)变量需要声明为var,否则它们是静态的。如果在sortStack()中没有t之前的var,t将是静态的,并且只会被每个pop覆盖,在sortStack()的所有返回中留下t==-3。sortedInsert()中的x也会出现同样的问题


var-stack=[-3,14,18,-5,30];
功能排序策略(s){
如果(s.长度>0){
var t=s.pop();
索茨塔克(s);;
分拣机(s,t);
}
}
功能分拣机(s、e){
如果(s.length==0 | | e>s[s.length-1]){
s、 推(e);
}否则{
var x=s.pop();
分拣机(s、e);
s、 推(x);
}
}
sortStack(堆栈);
控制台日志(堆栈)
/*
创建一个临时堆栈,比如tmpStack。
当输入堆栈不为空时,执行以下操作:
从输入堆栈中弹出一个元素,称之为temp
当临时堆栈不为空且临时堆栈顶部大于temp时,
从临时堆栈弹出并将其推送到输入堆栈
临时堆栈中的推送温度
排序后的数字在tmpStack中
*/
类索茨塔克{
构造函数(){
this.tempStack=[];
}
sortStack(输入堆栈){
if(inputStack.length==0){
返回“空”
}
while(inputStack.length>0){
let item=inputStack.pop()
而(this.tempStack.length>0&&itemlog(s.sortStack(a))
我正在尝试用Javascript实现这个算法。如果是全局变量,则需要使用
var
来获取本地变量。此外,您还将stack is empty与stack has elements in
sortedInsert
混淆。我试图在javascriptvar堆栈中实现这个算法=[-3,14,18,-5,30];函数bubbleSort(items){var length=items.length;for(var i=(length-1);i>=0;i--){//(var j=(length-i);j>0;j--){//如果(parseInt(items[j])var stack = [-3, 14, 18, -5, 30]; console.log(stack.sort());
var stack = [-3, 14, 18, -5, 30];

function arrSort(arr, subkey) {
  //Default to 0 if no subkey is set
  subkey = (subkey === undefined ? 0 : subkey);

  var a = arr.slice(0),
      b = [], x;

  // For each section in the array, create an array containing whatever we are trying to sort by and our unique ID
  for (x in a) {
    b[x] = [a[x][subkey], x];
  }

  b = b.sort();

  //Wipe out all the data that's currently in arr!
  arr.splice(0, arr.length);

  for (x in b) {
    arr.push(a[b[x][1]]);
  }

  return arr;
}

// console.log(arrSort(stack, 0));
console.log(arrSort(stack));