#include <stdlib.h>
#include <stdio.h>
#include <time.h>
inline int icmp(const int *x, const int *y){return *x - *y;}
int ibsearch(const int key, const int *base0, size_t nmemb) {
int i, base = 0; size_t lim;
for (lim = nmemb; lim != 0; lim /= 2) {
i = base + lim/2; printf("[%d]", i);
if (key == base0[i]) return i; if (key > base0[i]) { base = i+1; lim--; } }
return -1; }
int main(int argc, char **argv) {
int n, i, *base; char buf[BUFSIZ];
n = argc-1;
if (0 == n){ fprintf(stderr, "usage: %s numbers...\n", argv[0]); return 1; }
base = (int*)malloc(sizeof(int)*n);
for (i = 0; i < n; ++i) base[i] = atoi(argv[i+1]);
qsort(base, n, sizeof(int), (int(*)(const void*, const void*))icmp);
while (fprintf(stderr, "input target: "), fgets(buf,BUFSIZ,stdin))
puts(ibsearch(atoi(buf), base, n) < 0 ? " not found" : " found");
return 0; }