// Marvyn Jesse De La Torre CS1A Chapter 8 #3 pg.487
//
/*************************************************************
*
* Binary Search Lottery
*
* This program uses binary search to find a number in
* a sorted array of lottery numbers.
*
* Input:
* win: The number entered by the user
*
* Output:
* Displays whether the number was found.
*************************************************************/
#include <iostream>
using namespace std;
int binary(int arr[], int size, int win);
int main()
{
int arr[] = {
13579, 26791, 26792, 33445, 55555,
62483, 77777, 79422, 85647, 93121
};
int size = sizeof(arr) / sizeof(arr[0]);
int win;
cout << "Enter the number to search for: ";
cin >> win;
int position = binary(arr, size, win);
if (position == -1)
{
cout << "Number not found." << endl;
}
else
{
cout << "Number found." << endl;
}
return 0;
}
int binary(int arr[], int size, int win)
{
int first = 0;
int last = size - 1;
int position = -1;
while (position == -1 && first <= last)
{
int middle = (first + last) / 2;
if (arr[middle] == win)
{
position = middle;
}
else if (arr[middle] > win)
{
last = middle - 1;
}
else
{
first = middle + 1;
}
}
return position;
}
Ly8gTWFydnluIEplc3NlIERlIExhIFRvcnJlICAgICAgICAgICAgQ1MxQSAgICAgQ2hhcHRlciA4ICMzIHBnLjQ4NwovLwovKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogQmluYXJ5IFNlYXJjaCBMb3R0ZXJ5CioKKiBUaGlzIHByb2dyYW0gdXNlcyBiaW5hcnkgc2VhcmNoIHRvIGZpbmQgYSBudW1iZXIgaW4KKiBhIHNvcnRlZCBhcnJheSBvZiBsb3R0ZXJ5IG51bWJlcnMuCioKKiBJbnB1dDoKKiAgIHdpbjogVGhlIG51bWJlciBlbnRlcmVkIGJ5IHRoZSB1c2VyCioKKiBPdXRwdXQ6CiogICBEaXNwbGF5cyB3aGV0aGVyIHRoZSBudW1iZXIgd2FzIGZvdW5kLgoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKaW50IGJpbmFyeShpbnQgYXJyW10sIGludCBzaXplLCBpbnQgd2luKTsKCmludCBtYWluKCkKewogICAgaW50IGFycltdID0gewogICAgICAgIDEzNTc5LCAyNjc5MSwgMjY3OTIsIDMzNDQ1LCA1NTU1NSwKICAgICAgICA2MjQ4MywgNzc3NzcsIDc5NDIyLCA4NTY0NywgOTMxMjEKICAgIH07CgogICAgaW50IHNpemUgPSBzaXplb2YoYXJyKSAvIHNpemVvZihhcnJbMF0pOwogICAgaW50IHdpbjsKCiAgICBjb3V0IDw8ICJFbnRlciB0aGUgbnVtYmVyIHRvIHNlYXJjaCBmb3I6ICI7CiAgICBjaW4gPj4gd2luOwoKICAgIGludCBwb3NpdGlvbiA9IGJpbmFyeShhcnIsIHNpemUsIHdpbik7CgogICAgaWYgKHBvc2l0aW9uID09IC0xKQogICAgewogICAgICAgIGNvdXQgPDwgIk51bWJlciBub3QgZm91bmQuIiA8PCBlbmRsOwogICAgfQogICAgZWxzZQogICAgewogICAgICAgIGNvdXQgPDwgIk51bWJlciBmb3VuZC4iIDw8IGVuZGw7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0KCmludCBiaW5hcnkoaW50IGFycltdLCBpbnQgc2l6ZSwgaW50IHdpbikKewogICAgaW50IGZpcnN0ID0gMDsKICAgIGludCBsYXN0ID0gc2l6ZSAtIDE7CiAgICBpbnQgcG9zaXRpb24gPSAtMTsKCiAgICB3aGlsZSAocG9zaXRpb24gPT0gLTEgJiYgZmlyc3QgPD0gbGFzdCkKICAgIHsKICAgICAgICBpbnQgbWlkZGxlID0gKGZpcnN0ICsgbGFzdCkgLyAyOwoKICAgICAgICBpZiAoYXJyW21pZGRsZV0gPT0gd2luKQogICAgICAgIHsKICAgICAgICAgICAgcG9zaXRpb24gPSBtaWRkbGU7CiAgICAgICAgfQogICAgICAgIGVsc2UgaWYgKGFyclttaWRkbGVdID4gd2luKQogICAgICAgIHsKICAgICAgICAgICAgbGFzdCA9IG1pZGRsZSAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIHBvc2l0aW9uOwp9