使用俩个栈实现排序
public ArrayList<Integer> twoStacksSort(int[] numbers) {
// 存放所有的数
Stack<Integer> initStack = new Stack<>();
// 存放排好序的数
Stack<Integer> sortStack = new Stack<>();
for (int n : numbers){
initStack.push(n);
}
while (!initStack.empty()){
// 第一次排序的栈中没有数据
if (sortStack.empty()){
sortStack.push(initStack.pop());
}
// 使用变量来记录当前要插入的数
int num = initStack.pop();
// 这里是按照栈顶元素最大
// 如果大于栈顶元素直接压栈
if (num >= sortStack.peek()){
sortStack.push(num);
}else {
// 小于的话,将比要插入元素 num 大的数都弹出栈,压到 initStack 中
// 记录从排序栈中弹出的数量
int size = 0;
while (!sortStack.empty() && sortStack.peek() > num){
initStack.push(sortStack.pop());
size++;
}
// 找到合适的位置,插入进去
sortStack.push(num);
// 将弹出来的数还回去
while (size-- > 0){
sortStack.push(initStack.pop());
}
}
}
ArrayList<Integer> list = new ArrayList<>();
while (!sortStack.isEmpty()){
list.add(sortStack.pop());
}
return list;
}