Programy binárně vyhledají v seřízeném poli jedinečných čísel index položky se zadanou hodnotou. Není-li v něm ona zadaná hodnota, vrátí kód -1.

 
#include <stdlib.h>
#include <stdio.h>
#include <time.h>

/**
 *
 * Binarni vyhledavani 
 *
 * @file binarySearch.c
 *
 * @author   A.  Zlamal
 *
 */

#define DELKA_POLE 26      // muzeme potom delku pole menit jen na tomto miste

#define I_F_P "%d"    // FORMATOVACI_PARAMETR pro scanf - musime menit jen na tomto miste podle myType
#define O_F_P "%2d "    // FORMATOVACI_PARAMETR pro printf - musime menit jen na tomto miste podle myType

typedef int myType;        // muzeme potom typ menit jen na tomto miste
typedef myType pole[DELKA_POLE]; // analogicky: lze typ pole pohodlne pouzivat


int main()
{
    pole a;
    int i, d, s, h;
    myType ch;

    srand(time(NULL)); 
    a[0] = rand() % (4 + (rand() & 1));    
    for (i = 1; i < DELKA_POLE; ++i) {
        a[i] = a[i-1] + 1 + rand() % (5 + (rand() % 3));    
    }
    for (i = 0; i < DELKA_POLE; ++i) {
        printf("%2d ", i);    
    }
    printf("\n");    
    for (i = 0; i < DELKA_POLE; ++i) {
        printf(O_F_P, a[i]);
    }
    printf("\n");
    printf("Zadejte hodnotu, jez se ma nalezt: ");
    scanf(I_F_P, &ch);
    d = 0;
    h = DELKA_POLE;
    
 
/* Strukturovane ale s vyuzitim specifik jazyka C */
    int r;
    while ((r = a[(s = (d + h) / 2)] != ch) && d < h) {
        if (a[s] > ch) {
            h = s - 1;
        } else {
            d = s + 1;
        }
    }
    if (r) {
        s = -1;
    }
/* Strukturovane ale bez vyuziti specifik jazyka C */

    s = (d + h) / 2;
    while (a[s] != ch && d < h) {
        if (a[s] > ch) {
            h = s - 1;
        } else {
            d = s + 1;
        }
        s = (d + h) / 2;
    }
    if (a[s] != ch) {
        s = -1;
    }
/* se "zakazanymi" breaky - vhodne pro funkci */
    for (;;) {                // tady lze    "while (1) {"
        s = (d + h) / 2;
        if (a[s] == ch) {
            break;
        }
        if (a[s] > ch) {
            h = s - 1;
        } else {
            d = s + 1;
        }
        if (d >= h) {
            s = -1;
            break;
        }
    }
 
    printf(O_F_P"je na posici %d.\n", ch, s);
    return EXIT_SUCCESS;
}