私はこのコードの効率性を見つけるように言われ、このコードが実際に何をするかを調べるために約 1 時間 (私と私のパートナー) を費やしました。
これは検索アルゴリズムだと思っていましたが、無限ループに陥らずに機能させる方法を実際に見つけることはできません。
int busq(int *v, int x, int b, int a){
int m1, m2;
int result;
m1 = (b+a) / 3;
m2 = 2*m1;
if (v[m1] == x)
result = m1;
else
if (v[m2] == x)
result = m2;
else
if (x<v[m1])
result = busq(v, x, b, m1-1);
else
if (x>v[m2])
result = busq(v, x, m2+1, a);
else
result = busq(v, x, m1+1, m2-1);
return result;
}
パラメータ a、b、x の値はなく、*v (ベクトル) のサイズやベクトルの内容もありません。
こんな感じで解けるはずです。
このコードが何をするのか知りたいのですが、効率を教えていただければ幸いです。(O() 表記 EJ を使用します: O(1), O(n^2)...)