使用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++)