1

文字列の配列があります。二分探索アルゴリズムによって、文字列の配列から 1 つの char 文字列を見つける必要があります。この文字列が 1 つある場合、関数は位置を返して true を返す必要があります。それ以外の場合、この関数は配列内の挿入文字列の位置を返し、false を返す必要があります。どこかにバグがありますが、どこにあるのかわかりません((

例:

bool Binary_search ( char * arr_strings[], int & position, const char * search_string )
{
    int start = 0 ;
    int end = 10 - 1; // arr_strings [10]
    int for_compare;
    int middle;

    while ( start <= end )
    {
        middle = ( start + end ) / 2;
        for_compare = strcmp ( arr_strings[middle], search_string  );

        if ( for_compare > 0 )
        {
            start = middle + 1;
        } 
        else if ( for_compare < 0 )
        {
            end = middle - 1;
        }
        else
        {
            // if search_string is found in array, then function return position in array of strings and return true
            position = middle;
            return true;
        }
    }
    // if search_string is not found in array, then function must return position for insert string and return false 
    position = middle;
    return false;
}
4

2 に答える 2

1

多分それはそうあるべきだと思います:

if ( for_compare > 0 )
{
    end = middle - 1;
} 
else if ( for_compare < 0 )
{
    start = middle + 1;
}
于 2013-04-09T01:20:00.937 に答える