大学向けにこの割り当てがあります。ここでは、挿入ソートと同様のソートアルゴリズムを実装することになっています。 アルゴリズムは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でない限り、 'S ='の代わりに 'T ='を得る理由はありません。違いがあるかどうかを確認するために、すべての内容を印刷しないでください。 –