#include <stdio.h> static int list[] = { 8, 11, 17, 22, 29, 38, 51, 58, 65, 67, 74, 81, 87, 90, 96, 97 }; #define N_ELEMENTS(arr) (sizeof(arr) / sizeof(arr[0])) static void binary_search (int key) { int passes = 0; int *low = &list[0]; int *high = &list[N_ELEMENTS (list) - 1]; int *mid; printf ("key = %d\n", key); while (low <= high) { passes += 1; printf ("\n----------Pass #%d----------\n", passes); mid = low + (high - low) / 2; printf ("low, mid, high = %d, %d, %d\n", *low, *mid, *high); if (key < *mid) { high = mid - 1; printf ("key < mid\n"); } else if (key > *mid) { low = mid + 1; printf ("key > mid\n"); } else { printf ("key = %d\n", *mid); printf ("%d passes\n", passes); break; } } } int main (int argc, char **argv) { int key; if (argc != 2) { printf ("What is the number to search for? "); scanf ("%d", &key); } else sscanf (argv[1], "%d", &key); binary_search (key); return 0; }