1

私はこのコードの効率性を見つけるように言われ、このコードが実際に何をするかを調べるために約 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)...)

4

1 に答える 1