我试图理解使用中给出的递归对堆栈元素进行排序http://www.geeksforgeeks.org/sort-a-stack-using-recursion/不允许使用while、for…等任何循环结构。我们只能在堆栈S上使用以下ADT函数:
is_empty(S):测试堆栈是否为空。
push(S) :向堆栈添加新元素。
Pop(S):从堆栈中删除顶部元素。
top(S) :返回 top 元素的值。请注意,此函数不会从堆栈中删除元素。我在下面尝试过,但出现错误
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);
RangeError: Maximum call stack size exceeded
at sortedInsert:12:22
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5
at sortedInsert:21:5
var stack = [-3, 14, 18, -5, 30];
function compare(a,b) {
return parseInt(a, 10) - parseInt(b, 10);
}
stack.sort(compare);
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));
对于javascript,局部(作用域)变量需要声明为var,否则它们就是静态的。如果sortStack()中t之前没有var,t将是一个静态变量,每次弹出时都会被覆盖,因此sortStack()的所有返回都是t == -3。sortedInsert()中的x也会出现同样的问题。
js lang-js prettyprint-override">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);
有3个堆栈-A、B、C 堆栈A和B被排序(堆栈顶部的数字最大)。堆栈C为空,仅允许5次操作: 推,弹出,顶,is_empty,创建 我们需要编写一个函数来接收堆栈A和B,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。 我有算法: 比较A的顶部和B的顶部 我开始写代码,但有错误,我不知道为什么! 代码:
输入=堆栈数 但是你只能弹出输入,你不能推到它。输出也是另一个堆栈,你可以返回并推到它,但不能弹出 所以如果 由于您无法在中返回到
我已经在Java和C中找到了这个问题的几个实现,但我还没有找到一个使用JavaScript的示例。这是一个相当常见的技术面试问题: 在2n空间中对堆栈进行排序。(仅使用2个堆栈对堆栈进行排序)
有3个堆栈-A、B、C 堆栈A和B被排序(堆栈顶部的数字最大)。堆栈C为空,仅允许5次操作: 推,弹出,顶,is_empty,创建 我们需要编写一个函数来接收堆栈A和B,将堆栈A和B中的所有数字移动到堆栈C,堆栈C必须排序(最大数字在顶部)。 我有算法: 比较A的顶部和B的顶部 弹出最小的元素并推送到堆栈C 重复步骤2,直到任何堆栈(A或B)变空 将剩余元素从非空堆栈移动到C。现在你有了C中的所有
问题内容: 有没有一种快速的方法来对选择元素的项目进行排序?还是我不得不写JavaScript? 请任何想法。 问题答案: 这将达到目的。只要将您的select元素传递给la:当您需要对列表进行排序时。
主要内容:算法总结及实现,优化算法在实际开发中,有很多场景需要我们将数组元素按照从大到小(或者从小到大)的顺序排列,这样在查阅数据时会更加直观,例如: 一个保存了班级学号的数组,排序后更容易分区好学生和坏学生; 一个保存了商品单价的数组,排序后更容易看出它们的性价比。 对数组元素进行排序的方法有很多种,比如冒泡排序、归并排序、选择排序、插入排序、快速排序等,其中最经典最需要掌握的是「冒泡排序」。 以从小到大排序为例,冒泡排序的整体