/*
Description: Using Binary Strategy to Search in an array
in case of array elements are in increasing order.
that means a[i]<=a[j] whenever i < j
Author: Liutong Xu
Date: 2016/10/26
*/
#include <stdio.h>
#define LIMIT 10
int main()
{
int a[LIMIT] = {1,23,42,54,58,80,101,201,234,333};
int i;
int bottom = 0,top = LIMIT;
int number;
printf("Please input a number to search: "); i = (bottom + top) / 2;
while (number != a[i] && bottom < top)
{
if (number > a[i])
bottom = i + 1;
else
top = i - 1;
i = (bottom + top) / 2;
}
if (number == a[i])
printf("a[%d] = %d!\n",i
,number
); else
printf("The number %d is in not in the array!\n",number
);
return 0;
}
LyoKRGVzY3JpcHRpb246IFVzaW5nIEJpbmFyeSBTdHJhdGVneSB0byBTZWFyY2ggaW4gYW4gYXJyYXkKCQoJaW4gY2FzZSBvZiBhcnJheSBlbGVtZW50cyBhcmUgaW4gaW5jcmVhc2luZyBvcmRlci4gCgl0aGF0IG1lYW5zIGFbaV08PWFbal0gd2hlbmV2ZXIgaSA8IGoKCQpBdXRob3I6ICBMaXV0b25nIFh1CkRhdGU6IDIwMTYvMTAvMjYKKi8KCiNpbmNsdWRlIDxzdGRpby5oPgojZGVmaW5lIExJTUlUIDEwCmludCBtYWluKCkKewoJaW50IGFbTElNSVRdID0gezEsMjMsNDIsNTQsNTgsODAsMTAxLDIwMSwyMzQsMzMzfTsKCWludCBpOwoJaW50IGJvdHRvbSA9IDAsdG9wID0gTElNSVQ7CglpbnQgbnVtYmVyOwoJCglwcmludGYoIlBsZWFzZSBpbnB1dCBhIG51bWJlciB0byBzZWFyY2g6ICIpOwoJc2NhbmYoIiVkIiwmbnVtYmVyKTsKCWkgPSAoYm90dG9tICsgdG9wKSAvIDI7CQoJd2hpbGUgKG51bWJlciAhPSBhW2ldICYmIGJvdHRvbSA8IHRvcCkKCXsKCQlpZiAobnVtYmVyID4gYVtpXSkKCQkJYm90dG9tID0gaSArIDE7CgkJZWxzZSAKCQkJdG9wID0gaSAtIDE7CgkJaSA9IChib3R0b20gKyB0b3ApIC8gMjsKCX0gCglpZiAobnVtYmVyID09IGFbaV0pCgkJcHJpbnRmKCJhWyVkXSA9ICVkIVxuIixpLG51bWJlcik7CgllbHNlCgkJcHJpbnRmKCJUaGUgbnVtYmVyICVkIGlzIGluIG5vdCBpbiB0aGUgYXJyYXkhXG4iLG51bWJlcik7CgkJCglyZXR1cm4gMDsKfSA=