int BinarySearch(int arr[], int len, int target) {
int first = 0;
int last = len-1;
int mid;
while ((first < last) && (arr[mid]!=target))
{
// Assert: Array is sorted and first <= last
//Initialization:target is within (extremes inclusive) the range of first and last. IE First<=x<=Last
mid = (first+last) / 2;
//Maintenance: Increasing first to mid+1 if x>mid or decrease last to min-1 if x<mid.
if (target < arr[mid])
{last = mid-1;
}
else
{first = mid+1;
}
}
//Termination: target is not within the array.
if ((first==last) && (arr[first]==target)) return 1;
else return -1;
}
int main(){
int arr[10]={1,2,3,4,5,6,7,8,9,10};
int target=5;
int len=10;
printf("%d \n",BinarySearch
( arr
, len
, target
)); }
aW50IEJpbmFyeVNlYXJjaChpbnQgYXJyW10sIGludCBsZW4sIGludCB0YXJnZXQpIHsKaW50IGZpcnN0ID0gMDsKaW50IGxhc3QgPSBsZW4tMTsKaW50IG1pZDsKd2hpbGUgKChmaXJzdCA8IGxhc3QpICYmIChhcnJbbWlkXSE9dGFyZ2V0KSkgCnsKCS8vIEFzc2VydDogQXJyYXkgaXMgc29ydGVkIGFuZCBmaXJzdCA8PSBsYXN0CgkvL0luaXRpYWxpemF0aW9uOnRhcmdldCBpcyB3aXRoaW4gKGV4dHJlbWVzIGluY2x1c2l2ZSkgdGhlIHJhbmdlIG9mIGZpcnN0IGFuZCBsYXN0LiBJRSBGaXJzdDw9eDw9TGFzdAoJbWlkID0gKGZpcnN0K2xhc3QpIC8gMjsKCXByaW50ZigibWlkOiAlZCBcbiIsbWlkKTsKCS8vTWFpbnRlbmFuY2U6IEluY3JlYXNpbmcgZmlyc3QgdG8gbWlkKzEgaWYgeD5taWQgb3IgZGVjcmVhc2UgbGFzdCB0byBtaW4tMSBpZiB4PG1pZC4KCWlmICh0YXJnZXQgPCBhcnJbbWlkXSkgCgkJe2xhc3QgPSBtaWQtMTsKCQlwcmludGYoImxhc3Q6ICVkIFxuIixsYXN0KTsKCQl9CgllbHNlIAoJCXtmaXJzdCA9IG1pZCsxOwoJCXByaW50ZigiZmlyc3Q6ICVkIFxuIixmaXJzdCk7CgkJfQoJfQovL1Rlcm1pbmF0aW9uOiB0YXJnZXQgaXMgbm90IHdpdGhpbiB0aGUgYXJyYXkuCmlmICgoZmlyc3Q9PWxhc3QpICYmIChhcnJbZmlyc3RdPT10YXJnZXQpKSByZXR1cm4gMTsKCWVsc2UgcmV0dXJuIC0xOwoKfQoKaW50IG1haW4oKXsKaW50IGFyclsxMF09ezEsMiwzLDQsNSw2LDcsOCw5LDEwfTsKaW50IHRhcmdldD01OwppbnQgbGVuPTEwOwoKcHJpbnRmKCIlZCBcbiIsQmluYXJ5U2VhcmNoKCBhcnIsIGxlbiwgdGFyZ2V0KSk7Cn0=