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

我试图理解使用http://www.geeksforgeeks.org/sort-a-stack-using-recursion/中给出的递归来对堆栈元素进行排序。不允许使用像while,for..etc这样的任何循环结构。 我们只能在堆栈S上使用以下ADT功能:

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

推(S):将新元素添加到堆栈。

弹出(S):删除堆栈中的顶层元素。

顶部(S):返回顶部元素的值。 请注意,该功能不会从堆栈中删除元素。 我在下面尝试,但得到错误

var stack = [-3, 14, 18, -5, 30];

function sortStack() {
  if (stack.length > 0) {
    temp = stack.pop();
    sortStack();
    sortedInsert(temp, stack);
  }
}

function sortedInsert(element, stack) {
  if (stack.length > 0 || element > stack[stack.length - 1]) {
    stack.push(element);
  } else {
    temp = stack.pop();
    sortedInsert(element, stack);
    stack.push(temp);
  }

}

sortStack();

console.log(stack);

使用JavaScript,本地(范围)变量需要声明为var,否则它们是静态的。 如果在sortStack()之前没有var之前的var,那么t将是一个静态的,并且每个pop都会被覆盖,对sortStack()的所有返回值保留t == -3。 sortedInsert()中的x发生同样的问题。

var stack = [-3, 14, 18, -5, 30];

function sortStack(s) {
  if (s.length > 0) {
    var t = s.pop();
    sortStack(s);
    sortedInsert(s, t);
  }
}

function sortedInsert(s, e) {
  if (s.length == 0 || e > s[s.length - 1]) {
    s.push(e);
  } else {
    var x = s.pop();
    sortedInsert(s, e);
    s.push(x);
  }
}

sortStack(stack);

console.log(stack);

如果你只是想排序数组,你可以使用sort()方法。 检查下面的例子:

var stack = [-3, 14, 18, -5, 30];
console.log(stack.sort());

如果你想了解如何手动排序数组,请看看这个ans(注意:下面的代码是从同一个ans复制的):

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

var stack = [-3, 14, 18, -5, 30];

function compare(a,b) {

    return parseInt(a, 10) - parseInt(b, 10);
    }

stack.sort(compare);

console.log(stack);
链接地址: http://www.djcxy.com/p/79869.html

上一篇: sorting elements of stack using javascript

下一篇: How to show all elements in dynamic stack and queue (c++)