java - 为什么 Java 在此算法中产生长度 > 10000 的错误输出?

标签 java arrays algorithm sorting

我有一份大学作业,我们应该在其中实现类似于插入排序的排序算法。 该算法具有由 2 个 Stack S 和 T 组成的数据结构。S 中的元素应该是单调递减的,T 应该是单调递增的,两个 Stacks 从上到下。 我已经实现了这个并且不需要帮助。然而,当使用更大的输入数组时,大约 n=10000 的大小我得到奇怪的输出。

public static void main(String[] args) {
    int length = 10000;
    int[] input = new int[length];
    int j = length;
    for (int i = 0; i < length; i++) {

        input[i] = j;
        j --;
    }
    Datastruct Test = new Datastruct();

    Test.sort(input);
    System.out.println("S = " + Test.S);
    System.out.println("T = " + Test.T);
    Test.sort_back();
    System.out.println("Sorted Array: " + Test.S);
}


static class Datastruct{
    Stack<Integer> S;
    Stack<Integer> T;
    public Datastruct(){
        this.S = new Stack<Integer>();
        this.T = new Stack<Integer>();
    }
    public void sort_back() {
        while(! T.isEmpty()){
            S.push(T.pop());
        }
    }
    public void sort(int[] input) {
        for (int i = 0; i < input.length; i++) {
            if (S.isEmpty() && T.isEmpty()) {
                S.push(input[i]);
            }else if (!S.isEmpty() && S.peek() <= input[i]) {
                S.push(input[i]);
            } else {
                while(!S.isEmpty() && S.peek() > input[i]  ){
                    T.push(S.pop());
                }
                S.push(input[i]);
            }
            int tmp = S.pop();
            while(!S.isEmpty() && !T.isEmpty() && tmp > T.peek()){
                 S.push(T.pop());
            }
            S.push(tmp);

        }
    }

}

当我运行此代码时,我希望输出采用以下形式:

S = (...)

T = (...)

排序数组:(...)

然而对于大长度我得到:

T = (...)

T = (...)

排序数组:(...)

代码是用 Java 编写的,在 Macbook 上执行并在 Eclipse 中运行(如果有帮助的话)。

为什么输出会变得困惑?非常感谢任何指点。

最佳答案

也许您在尝试显示输出的任何地方的缓冲区都太小了?

我在eclipse中得到的输出是

S = [1]
T = [10000, 9999, ... , 2]
Sorted Array: [1,2, ... , 10000]

我省略了中间值。

尝试在终端中运行它,看看是否有区别?

或者右键控制台 -> 首选项 -> 勾选“限制控制台输出”,然后重试。

关于java - 为什么 Java 在此算法中产生长度 > 10000 的错误输出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40653927/

相关文章:

java - Logback 用法和打印列表

c++ - 数组转换指导

javascript - Jquery HTML 表本身

c - 比我使用的递归更好的方法(更好的时间复杂度)

从资源文件夹获取文件时出现 java.nio.file.FileSystemNotFoundException

java - 将用户输入打印到文本文件时,如何插入换行符?

java - 读取文件行的​​正确路径

javascript - 如何在javascript中将逗号分隔的本地存储字符串转换为数字数组

algorithm - 检测异常值的最佳方法是什么?

java - 计算表示 n 分的方式的数量