This C program performs uniform binary search.

Uniform binary search is an optimization of the classic binary search algorithm invented by Donald Knuth and given in Knuth’s The Art of Computer Programming. It uses a lookup table to update a single array index, rather than taking the midpoint of an upper and a lower bound on each iteration; therefore, it is optimized for architectures (such as Knuth’s MIX) on which

- a table lookup is generally faster than an addition and a shift, and
- many searches will be performed on the same array, or on several arrays of the same length

Here is the source code of the C program to uniform binary search on integer array. The C program is successfully compiled and run on a Linux system. The program output is also shown below.

`#define LOG_N 42`

static int delta[LOG_N];

void make_delta(int N)

`{`

int power = 1;

int i = 0;

do {

int half = power;

power <<= 1;

delta[i] = (N + half) / power;

} while (delta[i++] != 0);

`}`

int unisearch(int *a, int key)

`{`

int i = delta[0]-1; /* midpoint of array */

int d = 0;

while (1) {

if (key == a[i]) {

return i;

} else if (delta[d] == 0) {

return -1;

} else {

if (key < a[i]) {

i -= delta[++d];

} else {

i += delta[++d];

`}`

`}`

`}`

`}`

`#define N 10`

int main(void)

`{`

int num, a[N] = {1,3,5,6,7,9,14,15,17,19};

make_delta(N);

printf("\nEnter an element to search: ");

scanf("%d", &num);

printf("%d is at index %d\n", num, unisearch(a, num));

return 0;

`}`

advertisements

$ gcc uniformbinarysearch.c -o uniformbinarysearch $ ./uniformbinarysearch Enter an element to search: 19 19 is at index 9

**Sanfoundry Global Education & Learning Series – 1000 C Programs.**

Here’s the list of Best Reference Books in C Programming, Data Structures and Algorithms.