私は割り当てに使用しているこの再帰ソートアルゴリズムを持っていて、私の先生は簡単な私のアルゴリズムの実行時間を改善する方法があると言った...しかし、私はそれが何であるか把握することはできませんすべて。私が間違っていない限り、アルゴリズムの複雑さはO(n)ですか?クラスで再帰的メソッドの複雑さを計算する方法を学んでいないので、私は確信していません。コードは次のとおりです。すでにO(n)の再帰ソートアルゴリズムを改善するには?
public static void MyAlgorithm(int[] A, int n){
boolean done = true;
int j = 0;
while (j <= n - 2){
if (A[j] > A[j + 1]) {
swap(A,j,j+1);
done= false;
}
j++;
}
j = n - 1;
while (j >= 1){
if (A[j] < A[j - 1]) {
swap(A,j-1,j);
done=false;
}
j--;
}
if (!done)
MyAlgorithm(A, n);
else
return;
}
私が考えることができるのは、if(done)returnを追加することだけです。最初のループの後で、それはプログラムが他のいくつかの操作を行うのを保存するだけです。ああ、スワップ方法は基本的にちょうどです:
public static void swap(int[] arr, int pos1, int pos2){
int temp = arr[pos1];
arr[pos1] = arr[pos2];
arr[pos2] = temp;
}
ありがとうございます。
わかりやすい変数名の使用をお勧めします。これは本当に読みにくいです。業界では一文字の変数名は避けています。 – Jameson
それはO(n)ではありません - O(n)ソートアルゴリズムはありません。 – user93353
@ user93353とにかく比較しないもの... –