Skip to content
Snippets Groups Projects
binary.c 977 B
Newer Older
Bruce Cowan's avatar
Bruce Cowan committed
#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;
}