Двоичный (бинарный) поиск в упорядоченном массиве на языке C

Задача. Дан упорядоченный по возрастанию массив целых чисел. Вводится целочисленное значение. Определить, присутствует ли оно в массиве и в каком месте.

Пояснение. Поиск элемента в массиве можно выполнять последовательно: сначала сравнивать с искомым значением первый элемент, потом второй, третий и так далее. Однако для упорядоченных массивов более эффективен (в большинстве случаев потребуется меньше сравнений) метод деления пополам (бинарный, или двоичный, поиск). В этом случае поиск изначально выполняется только в левой или правой частях массива. На каждой итерации цикла "отрезок" поиска снова делится пополам. Подробнее алгоритм бинарного поиска описан в аналогичной задаче с решением на Python.

Решение задачи бинарного поиска на языке C:

#include <stdio.h>
#define N 10

int main() {
    int a[N] = {-4, -2, 1, 4, 7, 10, 11, 15, 18, 22};
    int n;
    short low = 0, high = N - 1, mid, isItem = 0;

    scanf("%d", &n);

    while (low <= high) {
        mid = (low + high) / 2;
        if (n < a[mid])
            high = mid - 1;
        else if (n > a[mid])
            low = mid + 1;
        else {
            printf("ID = %hd \n", mid);
            isItem = 1;
            break;
        }
    }

    if (isItem == 0)
        printf("Not found\n");
}

Примеры выполнения:

7
ID = 4
12
Not found