2016-11-17 2 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でない限り、 'S ='の代わりに 'T ='を得る理由はありません。違いがあるかどうかを確認するために、すべての内容を印刷しないでください。 –

答えて

1

出力を表示しようとすると、バッファが小さすぎることがありますか?

私は日食で取得出力は、私は中間値を省略

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

です。

端末で実行して違いがあるかどうかを確認してください。

右クリックしてコンソール - >環境設定 - > "コンソール出力を制限する"をチェックアウトし、もう一度やり直してください。

関連する問題