Правильна ли эта программа бинарного поиска? - PullRequest
0 голосов
/ 20 сентября 2019

Это алгоритм, который я написал на C:

int binfin(int vec[],int svec, int tfind) {
    int left=0,right=svec-1,mid,sol=-1;
    do {
        mid=(left+right)>>1;
        if(vec[mid]<tfind) {
            left=mid+1;
        } else if(vec[mid]>tfind) {
            right=mid-1;
        }
    } while(vec[mid]!=tfind && left<=right);

    if(left<=right)
        sol=mid;
    return sol;

}

Это часть моей домашней работы, но онлайн-судья решил, что она неверна.

Это всего лишь фрагмент программы,хотя я считаю, что это неприятная часть.Если это правильно, то, пожалуйста, скажите мне.

1 Ответ

0 голосов
/ 20 сентября 2019

Что происходит, когда svec в ваших входах в 0?То есть, когда массив для поиска пуст?

Вы вычислите right как -1, а mid также будет -1.Затем вы прочитаете vec[-1], что может вызвать неопределенное поведение.

Также вы не получите правильный результат.

...