Двоичный поиск (Керниган-Ритчи, упр. 3.1) - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Добрый день. Что-то я подвисла немного...

Задание:

В нашем двоичном поиске каждый цикл содержит две проверки, тогда как достаточно было бы одной (зато взамен их потребовалось бы больше снаружи цикла). Напишите версию функции с одной проверкой внутри цикла.
int binsearch(int x, int v[], int n)
{
    int low, high, mid;
 
    low=0;
    high=n-1;
        
    while (low<=high)
    {
        mid=(low+high)/2;
        if (x<v[mid])
            high=mid-1;
        else if (x>v[mid])
            low=mid+1;
        else return mid;
        
    }
    return -1;
}
Поиском по форуму уже нашла, что такую задачу решали, но в предложенном решении проверка выносится за тело цикла только формально. Есть ли какие-то другие варианты решения этой задачи? Я попробовала покрутить, повертеть, но что-то ничего на ум не идет.

Решение задачи: «Двоичный поиск (Керниган-Ритчи, упр. 3.1)»

textual
Листинг программы
int BinarySearch(const int *a, const int n, const int x)
{
    int l, r, mid;         
    l = 0;
    r = n - 1;
    do {
         mid = (l + r) >> 1; 
         if (a[mid] < x)
            l = mid + 1;
         else  r = mid - 1;
    }
    while (l < r && a[mid] != x);
 
    if (a[l] == x)
       return l;
    else if (a[mid] == x)
       return mid;
    else
       return -1;
}

Объяснение кода листинга программы

  1. В функции объявлены три аргумента: a, n и x.
  2. Переменные l и r инициализируются значениями 0 и n-1 соответственно.
  3. Далее в цикле do...while происходит двоичный поиск. На каждой итерации значения l и r обновляются, а значение mid становится серединным индексом между l и r.
  4. Если элемент в индексе mid меньше искомого значения x, то значение l обновляется на mid+1.
  5. Если элемент в индексе mid равен искомому значению x, то функция возвращает значение mid.
  6. Если элемент в индексе mid больше искомого значения x, то значение r обновляется на mid-1.
  7. Если цикл завершается и значение x не найдено, то возвращается -1.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 4.1 из 5
Похожие ответы