При выполении задачи всплывает ошибка. Задача по бинарному поиску внутри цикла - C (СИ)

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

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

#include <stdio.h>
 
int binsearch (int x, int v[], int n);
//Бинарный поиск
 
void main ()
{
    int n = 20;
    int a[n];
    char i;
    for (i = 0; i <n; i++)
        a[i] = i*5;
    printf ("%d\n",binsearch(30,a,n));
    return;
}
 
int binsearch (int x, int v[], int n)
{
    int low, high, mid;
    low = 0;
    high = n - 1;
    while ((low <= high) && (x!=v[mid]))
    {
        mid = (low + high)/2;
        if (x < v[mid])
            high = mid - 1;
        else
            low = mid + 1;
 
   }
     printf("%d\n",mid);
     if (x==v[mid]) return mid;
     return -1;
}

Решение задачи: «При выполении задачи всплывает ошибка. Задача по бинарному поиску внутри цикла»

textual
Листинг программы
int binsearch (int x, int v[], int n)
{
    int low, high, mid;
    low = 0;
    high = n - 1;
    mid = 0;
    while ((low <= high) && (x!=v[mid]))
    {
        mid = (low + high)/2;
        if (x < v[mid])
            high = mid - 1;
        else
            low = mid + 1;
 
   }
     printf("%d\n",mid);
     if (x==v[mid]) return mid;
     return -1;
}

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

  1. В функции binsearch определяются следующие переменные:
    • x - значение, которое нужно найти в массиве v.
    • v[] - массив, в котором нужно найти значение x.
    • n - размер массива v[].
  2. Затем определяются следующие переменные:
    • low - инициализируется значением 0, это индекс левой границы диапазона поиска в массиве v[].
    • high - инициализируется значением n - 1, это индекс правой границы диапазона поиска в массиве v[].
    • mid - инициализируется значением 0, это первый средний индекс в диапазоне поиска.
  3. Затем выполняется цикл while, который будет выполняться до тех пор, пока low не станет больше high или x не будет равно v[mid].
  4. Внутри цикла mid обновляется на (low + high)/2, это новый средний индекс.
  5. Затем выполняется проверка if (x < v[mid]), если она истинна, то значение high обновляется на mid - 1, тем самым смещая правую границу диапазона поиска влево.
  6. Если проверка if (x < v[mid]) ложна, то значение low обновляется на mid + 1, тем самым смещая левую границу диапазона поиска вправо.
  7. После выхода из цикла while выполняется операция printf(%d\n,mid);, которая выводит индекс среднего элемента, где был найден элемент x.
  8. Затем выполняется проверка if (x==v[mid]), если она истинна, то возвращается значение mid.
  9. Если проверка if (x==v[mid]) ложна, то возвращается значение -1, что означает, что элемент x не найден в массиве v[].

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


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

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

5   голосов , оценка 3.8 из 5