一、代码思路
1、构造一个排序函数,传入一个栈,完成这个栈内数据的排序
2、让原栈从顶到底由大到小排序
→ 只要让工具栈从顶到底由小到大排序;
→ 原栈每弹出一个值都要在新栈中严格按照从顶到底由大到小排序;
→ 更小的数放进新栈操作简单,更大的数放进新栈操作难;
3、本算法让工具栈的一些已经排好序的数据再倒回给原栈,之前从新栈已经 pop 出来的数据选择落脚点。
二、代码演示
public class Test {
public static void main(String[] args) {
Stack<Integer> s = new Stack<Integer>();
s.push(3);
s.push(7);
s.push(4);
s.push(1);
sort(s);
while (!s.isEmpty()){
System.out.println(s.pop());
}
}
public static void sort(Stack<Integer> s){ // 这里也要泛型
Stack<Integer> help = new Stack<Integer>();
int cur;
while (!s.isEmpty()){
cur = s.pop();
while (!help.isEmpty() && cur > help.peek()){
s.push(help.pop());
}
help.push(cur);
}
while (!help.isEmpty()){
s.push(help.pop());
}
}
}
三、Java语法新学
1、Stack 和 LinkedList 都有泛型、isEmpty函数