/* binsearch.c */ #include #include int bsearch(int [], int, int); int main() { int a[100], i; int target = 45; /* initialize array */ for (i=0; i<100; i++) { a[i]=i; } printf("target %d found at position %d\n",target, bsearch(a, 100, target)); } /* Assume a sorted in increasing order. Returns pos at which target occurs in a and -1 if target not in a */ int bsearch(int a[], int n, int target) { int start, end, middle, found, position; start = 0; end = n-1; found = 0; middle; position = -1; while ((!found) && (start < end -1)) { middle = (start + end)/2; /* this truncates to an int */ if (a[middle] == target) { found = 1; position = middle; } else { if (a[middle] < target) start = middle; else end = middle; } } if (!found) { assert(start == end || start == end-1); if (a[start] == target) position = start; if (a[end] == target) position = end; } return position; }