Блок задач

2. Алгоритмы

Темы
Сложность 3

Задача «Двоичный поиск»

Реализовать поиск делением пополам в отсортированном массиве (аналог стандартной функции bsearch). Функция принимает ключ key и находит элемент, равный ключу (в терминах функции cmp).

void *my_bsearch(const void *key, const void *ptr,
                 size_t count, size_t size,
                 int (*cmp)(const void *, const void *));

где:

  • ptr — указатель на начало массива,
  • count — количество элементов в массиве,
  • size — размер одного элемента,
  • cmp — функция сравнения, которая возвращает число больше нуля, если первый аргумент больше второго, число меньше нуля, если первый меньше второго, и ноль, если аргументы равны.

Поведение функции проверить с помощью assert (особенно краевые случаи: size=0, size=1, size четное, size нечетное).