1
我有这个大学的任务,我们应该实现类似于插入排序的排序算法。 算法有一个由2个堆栈S和T组成的数据结构.S中的元素应该是递减的单调性,并且T应该是单调递增的,这两个堆栈从上到下。 我已经实现了这一点,并不需要帮助。然而,当玩弄更大的输入数组,大约n = 10000时,我会得到奇怪的输出。为什么Java在此算法中产生长度> 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无法处理大型缓冲区,否则没有理由得到'T ='而不是'S ='。尽量不要打印所有的内容,看看是否有所作为。 –