gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:58:42 25 4
gpt4 key购买 nike

我有一份大学作业,我们应该在其中实现类似于插入排序的排序算法。该算法具有由 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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com