これは私が作った最初のアルゴリズムである:Java配列内のすべての要素をシフトするにはどのアルゴリズムが効率的ですか?
int tmp = null;
for (int i = arr.length-1; i > 0; i--){
tmp = arr[i];
arr[i] = arr[i-1];
arr[i-1] = tmp;
}
、これが私のコンピュータの先生が私に言う第2のアルゴリズムである:
int tmp = null;
for (int i = arr.length-1; i > 0; i--){
for(int j = 0; j < arr.length; j++){
tmp = arr[i];
arr[i] = arr[j];
arr[j] = tmp;
}
}
は、より効率的であるかについての私を助けて。 100000件のデータを持つ配列で
System.currentTimeMillis();
この方法を使用して、私の実験では、 最初のアルゴリズムは速かったけど、私の先生は、第1の高速化、各種のものと大きなデータベースにおけるだろうと言います。私はLinkedListがうまくいくことを知っていますが、私はこの問題について知りたいのです。
私はあなたがやろうとしていることを明確にしていませんが、第2のものは明らかにO(n^2)ですが、最初のものはOです(n)、すなわち、第2のものはより大きな入力に対してより遅くなる。 –
私はあなたの質問に直接答えませんが、私はシフトの数を覚えてシフトの数を処理する独自のgetメソッドを書く方が良いと信じています。 – xenteros
はい、私は、先生が第2のアルゴリズムがより速いと主張していることに驚いています。 – Actorclavilis