#include <stdio.h>
#define SIZE 15
int binarySearch(const int b[], int searchKey, size_t low, size_t high);
int main(void) {
int a[SIZE];
for (size_t i = 0; i < SIZE; ++i) {
a[i] = 2 * i;
}
int key = 10;
int result = binarySearch(a, key, 0, SIZE - 1);
if (result != -1) {
printf("Found value at index %d\n", result
); } else {
}
return 0;
}
int binarySearch(const int b[], int searchKey, size_t low, size_t high) {
if (low > high) {
return -1;
}
size_t middle = (low + high) / 2;
if (searchKey == b[middle]) {
return middle;
} else if (searchKey < b[middle]) {
if (middle == 0) {
return -1;
}
return binarySearch(b, searchKey, low, middle - 1);
} else {
return binarySearch(b, searchKey, middle + 1, high);
}
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNkZWZpbmUgU0laRSAxNQoKaW50IGJpbmFyeVNlYXJjaChjb25zdCBpbnQgYltdLCBpbnQgc2VhcmNoS2V5LCBzaXplX3QgbG93LCBzaXplX3QgaGlnaCk7CgppbnQgbWFpbih2b2lkKSB7CiAgICBpbnQgYVtTSVpFXTsKCiAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IFNJWkU7ICsraSkgewogICAgICAgIGFbaV0gPSAyICogaTsKICAgIH0KCiAgICBpbnQga2V5ID0gMTA7CiAgICBpbnQgcmVzdWx0ID0gYmluYXJ5U2VhcmNoKGEsIGtleSwgMCwgU0laRSAtIDEpOwoKICAgIGlmIChyZXN1bHQgIT0gLTEpIHsKICAgICAgICBwcmludGYoIkZvdW5kIHZhbHVlIGF0IGluZGV4ICVkXG4iLCByZXN1bHQpOwogICAgfSBlbHNlIHsKICAgICAgICBwcmludGYoIlZhbHVlIG5vdCBmb3VuZFxuIik7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCmludCBiaW5hcnlTZWFyY2goY29uc3QgaW50IGJbXSwgaW50IHNlYXJjaEtleSwgc2l6ZV90IGxvdywgc2l6ZV90IGhpZ2gpIHsKICAgIGlmIChsb3cgPiBoaWdoKSB7CiAgICAgICAgcmV0dXJuIC0xOwogICAgfQoKICAgIHNpemVfdCBtaWRkbGUgPSAobG93ICsgaGlnaCkgLyAyOwoKICAgIGlmIChzZWFyY2hLZXkgPT0gYlttaWRkbGVdKSB7CiAgICAgICAgcmV0dXJuIG1pZGRsZTsKICAgIH0gZWxzZSBpZiAoc2VhcmNoS2V5IDwgYlttaWRkbGVdKSB7CiAgICAgICAgaWYgKG1pZGRsZSA9PSAwKSB7CiAgICAgICAgICAgIHJldHVybiAtMTsKICAgICAgICB9CiAgICAgICAgcmV0dXJuIGJpbmFyeVNlYXJjaChiLCBzZWFyY2hLZXksIGxvdywgbWlkZGxlIC0gMSk7CiAgICB9IGVsc2UgewogICAgICAgIHJldHVybiBiaW5hcnlTZWFyY2goYiwgc2VhcmNoS2V5LCBtaWRkbGUgKyAxLCBoaWdoKTsKICAgIH0KfQ==