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

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

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

Листинг программы
  1. #include <stdio.h>
  2. int binsearch (int x, int v[], int n);
  3. //Бинарный поиск
  4. void main ()
  5. {
  6. int n = 20;
  7. int a[n];
  8. char i;
  9. for (i = 0; i <n; i++)
  10. a[i] = i*5;
  11. printf ("%d\n",binsearch(30,a,n));
  12. return;
  13. }
  14. int binsearch (int x, int v[], int n)
  15. {
  16. int low, high, mid;
  17. low = 0;
  18. high = n - 1;
  19. while ((low <= high) && (x!=v[mid]))
  20. {
  21. mid = (low + high)/2;
  22. if (x < v[mid])
  23. high = mid - 1;
  24. else
  25. low = mid + 1;
  26. }
  27. printf("%d\n",mid);
  28. if (x==v[mid]) return mid;
  29. return -1;
  30. }

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

textual
Листинг программы
  1. int binsearch (int x, int v[], int n)
  2. {
  3.     int low, high, mid;
  4.     low = 0;
  5.     high = n - 1;
  6.     mid = 0;
  7.     while ((low <= high) && (x!=v[mid]))
  8.     {
  9.         mid = (low + high)/2;
  10.         if (x < v[mid])
  11.             high = mid - 1;
  12.         else
  13.             low = mid + 1;
  14.  
  15.    }
  16.      printf("%d\n",mid);
  17.      if (x==v[mid]) return mid;
  18.      return -1;
  19. }

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

  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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут