📜  使用堆栈对数组进行排序(1)

📅  最后修改于: 2023-12-03 15:06:55.779000             🧑  作者: Mango

使用堆栈对数组进行排序

什么是堆栈?

堆栈是一种数据结构,它具有先进后出(LIFO)的特点。它有两个基本操作:入栈(push)和出栈(pop)。入栈会在栈顶添加一个元素,出栈会从栈顶删除一个元素。

堆栈的应用

堆栈在很多算法中都有应用,比如图形的深度优先遍历、括号匹配、表达式求值等。

使用堆栈对数组进行排序

我们可以通过堆栈实现对数组的排序。下面是一个简单的例子,使用堆栈对一个数组进行从小到大的排序:

import java.util.Stack;

public class StackSort {
    public static void main(String[] args) {
        int[] nums = {5, 3, 7, 1, 8, 2, 9, 4, 6};

        Stack<Integer> stack1 = new Stack<Integer>();
        Stack<Integer> stack2 = new Stack<Integer>();

        for (int i = 0; i < nums.length; i++) {
            stack1.push(nums[i]);
        }

        while (!stack1.isEmpty()) {
            int tmp = stack1.pop();
            while (!stack2.isEmpty() && tmp < stack2.peek()) {
                stack1.push(stack2.pop());
            }
            stack2.push(tmp);
        }

        while (!stack2.isEmpty()) {
            System.out.print(stack2.pop() + " ");
        }
    }
}

解释一下程序的运行过程:

  1. 首先将数组中的元素依次入栈 stack1 中。
  2. 使用 while 循环,不断从 stack1 中弹出元素 tmp。
  3. 判断 stack2 是否为空,以及 tmp 是否小于 stack2 的栈顶元素。如果是,则将 stack2 的栈顶元素弹出并入栈 stack1 中,以保证 stack2 的元素是有序的;重复此步骤直到 stack2 的栈顶元素不比 tmp 大。
  4. 将 tmp 入栈 stack2 中,以保证 stack2 的元素是有序的。
  5. 重复步骤 2-4,直到 stack1 中没有元素。
  6. 将 stack2 中的元素依次出栈并打印。
总结

在此篇文章中,我们学习了堆栈的基本概念和应用,并使用堆栈对数组进行了排序。堆栈在算法中具有重要的作用,希望本文对大家理解和学习算法有所帮助。