#include <iostream>
using namespace std;
void search( int a[], int array_length, int key) {
int high = array_length -1;
int low = 0;
if (a[low] > key ) {
cout << "Key not Found. Possible Insertion before : " << a[low] << endl;
return;
}
else if (a[high] < key ) {
cout << "Key not Found. Possible Insertion after : " << a[high] << endl;
return;
}
else {
bool present=false;
int mid = 0;
while ( low <= high ) {
mid = low + ((high - low) / 2);
present = false;
if (a[mid] > key){
high = mid-1;
} else if (a[mid] < key){
low = mid+1;
}else {
present = true;
break;
}
}
if (present) cout << "Key Found at index : " << mid << endl;
else {
if (a[mid] < key )
cout << "Key not Found. Possible Insertion after : " << a[mid] << endl;
else
cout << "Key not Found. Possible Insertion before : " << a[mid] << endl;
}
}
}
int main() {
int a[] = {2, 5 , 8, 13, 18, 22, 28, 31, 35, 38, 40};
int array_length = sizeof(a) / sizeof(a[0]);
search(a,array_length, 15);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKdm9pZCBzZWFyY2goIGludCBhW10sIGludCBhcnJheV9sZW5ndGgsIGludCBrZXkpIHsKCWludCBoaWdoID0gYXJyYXlfbGVuZ3RoIC0xOwoJaW50IGxvdyA9IDA7CglpZiAoYVtsb3ddID4ga2V5ICkgewoJCWNvdXQgPDwgIktleSBub3QgRm91bmQuIFBvc3NpYmxlIEluc2VydGlvbiBiZWZvcmUgOiAiIDw8IGFbbG93XSA8PCBlbmRsOwoJCXJldHVybjsKCX0KCWVsc2UgaWYgKGFbaGlnaF0gPCBrZXkgKSB7CgkJY291dCA8PCAiS2V5IG5vdCBGb3VuZC4gUG9zc2libGUgSW5zZXJ0aW9uIGFmdGVyIDogIiA8PCBhW2hpZ2hdIDw8IGVuZGw7CgkJcmV0dXJuOwoJfQoJZWxzZSB7CgkJYm9vbCBwcmVzZW50PWZhbHNlOwoJCWludCBtaWQgPSAwOwoJCXdoaWxlICggbG93IDw9IGhpZ2ggKSB7CgkgICAgICAgIG1pZCA9IGxvdyArICgoaGlnaCAtIGxvdykgLyAyKTsKCSAgICAgICAgcHJlc2VudCA9IGZhbHNlOwoJCQlpZiAoYVttaWRdID4ga2V5KXsKCQkJCWhpZ2ggPSBtaWQtMTsKCQkJfSBlbHNlIGlmIChhW21pZF0gPCBrZXkpewoJCQkJbG93ID0gbWlkKzE7CgkJCX1lbHNlIHsKCQkJCXByZXNlbnQgPSB0cnVlOwoJCQkJYnJlYWs7CgkJCX0KCQl9CgkJaWYgKHByZXNlbnQpIGNvdXQgPDwgIktleSBGb3VuZCBhdCBpbmRleCA6ICIgPDwgbWlkIDw8IGVuZGw7CgkJZWxzZSB7CgkJCWlmIChhW21pZF0gPCBrZXkgKQoJCQkJY291dCA8PCAiS2V5IG5vdCBGb3VuZC4gUG9zc2libGUgSW5zZXJ0aW9uIGFmdGVyIDogIiA8PCBhW21pZF0gPDwgZW5kbDsKCQkJZWxzZQoJCQkJY291dCA8PCAiS2V5IG5vdCBGb3VuZC4gUG9zc2libGUgSW5zZXJ0aW9uIGJlZm9yZSA6ICIgPDwgYVttaWRdIDw8IGVuZGw7CgkJfQoJfQp9CmludCBtYWluKCkgewoJaW50IGFbXSA9IHsyLCA1ICwgOCwgMTMsIDE4LCAyMiwgMjgsIDMxLCAzNSwgMzgsIDQwfTsKCWludCBhcnJheV9sZW5ndGggPSBzaXplb2YoYSkgLyBzaXplb2YoYVswXSk7IAoJc2VhcmNoKGEsYXJyYXlfbGVuZ3RoLCAxNSk7CglyZXR1cm4gMDsKfQ==