2016-11-17 79 views
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中运行,如果这是有帮助的。

为什么输出会混乱?任何指针都非常感谢。

+0

除非是Eclipse无法处理大型缓冲区,否则没有理由得到'T ='而不是'S ='。尽量不要打印所有的内容,看看是否有所作为。 –

回答

1

也许你试图显示输出的地方有太小的缓冲区?

输出I在蚀得到的是

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

予省略中间值。

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

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

相关问题