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