Menu
Home
People
Places
Arts
History
Plants & Animals
Science
Life & Culture
Technology
Reference.org
Uniform binary search
open-in-new
C implementation
The uniform
binary search algorithm
looks like this, when implemented in
C
.
#define LOG_N 4 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]; } } } } /* Example of use: */ #define N 10 int main(void) { int a[N] = {1, 3, 5, 6, 7, 9, 14, 15, 17, 19}; make_delta(N); for (int i = 0; i < 20; ++i) printf("%d is at index %d\n", i, unisearch(a, i)); return 0; }
Knuth
.
The Art of Computer Programming
, Volume 3. Page 412, Algorithm C.
External links
An implementation of Knuth's algorithm
in
Pascal
, by Han de Bruijn
An implementation of Knuth's algorithm
in
Go
, by Adrianus Warmenhoven