// Chapter 3.1 of the book on page 195 contains the interative binary search algorithm.
// Chapter 5.4 of the book on page 364 contains the recursive binary search algorithm, this is implement below.
#include <iostream>
using namespace std;
// function prototype
int binarySearch(const int[], int, int, int);
const int SIZE = 20;
int main()
{
int tests[SIZE] = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20};
int result;
int searchFor;
cout << "Enter the number you wish to search for: ";
cin >> searchFor;
result = binarySearch(tests, 0, SIZE - 1, searchFor);
if (result == -1)
cout << "That number does not exist in the list.\n";
else
{
cout << "That number is in the list. It is found at index " << result;
cout << " in the array.\n";
}
return 0;
}
int binarySearch(const int array[], int first, int last, int value)
{
int midpoint;
if (first > last)
return -1;
midpoint = (first + last)/2;
if(array[midpoint]==value)
return midpoint;
if(array[midpoint] < value)
return binarySearch(array, midpoint+1, last, value);
else
return binarySearch(array, first, midpoint-1, value);
}
Ly8gQ2hhcHRlciAzLjEgb2YgdGhlIGJvb2sgb24gcGFnZSAxOTUgY29udGFpbnMgdGhlIGludGVyYXRpdmUgYmluYXJ5IHNlYXJjaCBhbGdvcml0aG0uCi8vIENoYXB0ZXIgNS40IG9mIHRoZSBib29rIG9uIHBhZ2UgMzY0IGNvbnRhaW5zIHRoZSByZWN1cnNpdmUgYmluYXJ5IHNlYXJjaCBhbGdvcml0aG0sIHRoaXMgaXMgaW1wbGVtZW50IGJlbG93LgoKCiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKCi8vIGZ1bmN0aW9uIHByb3RvdHlwZQppbnQgYmluYXJ5U2VhcmNoKGNvbnN0IGludFtdLCBpbnQsIGludCwgaW50KTsKY29uc3QgaW50IFNJWkUgPSAyMDsKCmludCBtYWluKCkKewoJaW50IHRlc3RzW1NJWkVdID0gezEsIDIsIDMsIDQsIDUsIDYsIDcsIDgsIDksIDEwLCAxMSwgMTIsIDEzLCAxNCwgMTUsIDE2LCAxNywgMTgsIDE5LCAyMH07CglpbnQgcmVzdWx0OwoJaW50IHNlYXJjaEZvcjsKCgljb3V0IDw8ICJFbnRlciB0aGUgbnVtYmVyIHlvdSB3aXNoIHRvIHNlYXJjaCBmb3I6ICI7CgljaW4gPj4gc2VhcmNoRm9yOwoJcmVzdWx0ID0gYmluYXJ5U2VhcmNoKHRlc3RzLCAwLCBTSVpFIC0gMSwgc2VhcmNoRm9yKTsKCWlmIChyZXN1bHQgPT0gLTEpCgkJY291dCA8PCAiVGhhdCBudW1iZXIgZG9lcyBub3QgZXhpc3QgaW4gdGhlIGxpc3QuXG4iOwoJZWxzZQoJewoJCWNvdXQgPDwgIlRoYXQgbnVtYmVyIGlzIGluIHRoZSBsaXN0LiBJdCBpcyBmb3VuZCBhdCBpbmRleCAiIDw8IHJlc3VsdDsKCQljb3V0IDw8ICIgaW4gdGhlIGFycmF5LlxuIjsKCX0KCXJldHVybiAwOwp9CgppbnQgYmluYXJ5U2VhcmNoKGNvbnN0IGludCBhcnJheVtdLCBpbnQgZmlyc3QsIGludCBsYXN0LCBpbnQgdmFsdWUpIAp7CglpbnQgbWlkcG9pbnQ7CglpZiAoZmlyc3QgPiBsYXN0KQoJCXJldHVybiAtMTsKCW1pZHBvaW50ID0gKGZpcnN0ICsgbGFzdCkvMjsKCWlmKGFycmF5W21pZHBvaW50XT09dmFsdWUpCgkJcmV0dXJuIG1pZHBvaW50OwoJaWYoYXJyYXlbbWlkcG9pbnRdIDwgdmFsdWUpCgkJcmV0dXJuIGJpbmFyeVNlYXJjaChhcnJheSwgbWlkcG9pbnQrMSwgbGFzdCwgdmFsdWUpOwoJZWxzZQoJCXJldHVybiBiaW5hcnlTZWFyY2goYXJyYXksIGZpcnN0LCBtaWRwb2ludC0xLCB2YWx1ZSk7Cn0=