//Cameron Pham CS1A Chapter 8, p. 488, #8
//
/******************************************************************************
* SEARCH FOR BENCHMARKS
* ______________________________________________________________________________
* This program demonstrates and compares two sorting methods. It uses two
* identical arrays of eight integers, displays the contents of each array, and
* sorts them. After each pass of both sorting algorithms, the program displays
* the updated array.
* ______________________________________________________________________________
* INPUT
* Number // Number that is being searched for
*
* OUTPUT
* Linear // Amount of linear search comparisons
* Binary // Amount of binary search comparisons
*******************************************************************************/
#include <iostream>
using namespace std;
// Function prototypes
int linearSearch( const int [ ] , int , int , int & ) ;
int binarySearch( const int [ ] , int , int , int & ) ;
int main( )
{
// Initialize Variables
const int SIZE = 20 ;
int numbers[ SIZE] =
{
10 , 15 , 20 , 25 , 30 , 35 , 40 , 45 , 50 , 55 ,
60 , 65 , 70 , 75 , 80 , 85 , 90 , 95 , 100 , 105
} ;
int searchValue; // Value to search for
int linearComparisons = 0 ; // Number of linear search comparisons
int binaryComparisons = 0 ; // Number of binary search comparisons
int linearResult; // Result of linear search
int binaryResult; // Result of binary search
// Ask the user for a value to search for
cout << "Enter an integer to search for: " ;
cin >> searchValue;
// Call the linear search function
linearResult = linearSearch( numbers, SIZE, searchValue,
linearComparisons) ;
// Call the binary search function
binaryResult = binarySearch( numbers, SIZE, searchValue,
binaryComparisons) ;
// Display the search results
cout << "\n Search Results" << endl;
cout << "------------------------------" << endl;
if ( linearResult ! = - 1 )
{
cout << "Value found: " << searchValue << endl;
cout << "Linear search comparisons: "
<< linearComparisons << endl;
cout << "Binary search comparisons: "
<< binaryComparisons << endl;
}
else
{
cout << "Value was not found in the array." << endl;
cout << "Linear search comparisons: "
<< linearComparisons << endl;
cout << "Binary search comparisons: "
<< binaryComparisons << endl;
}
return 0 ;
}
// Function to perform a linear search
int linearSearch( const int array[ ] , int size, int value,
int & comparisons)
{
for ( int count = 0 ; count < size; count++ )
{
comparisons++ ;
if ( array[ count] == value)
{
return count;
}
}
return - 1 ;
}
// Function to perform a binary search
int binarySearch( const int array[ ] , int size, int value,
int & comparisons)
{
int first = 0 ;
int last = size - 1 ;
int middle;
while ( first <= last)
{
middle = ( first + last) / 2 ;
comparisons++ ;
if ( array[ middle] == value)
{
return middle;
}
else if ( array[ middle] > value)
{
last = middle - 1 ;
}
else
{
first = middle + 1 ;
}
}
return - 1 ;
}
Ly9DYW1lcm9uIFBoYW0gICAgICAgICAgICAgQ1MxQSAgICAgICAgICAgICAgICAgICAgICAgQ2hhcHRlciA4LCBwLiA0ODgsICM4Ci8vCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiBTRUFSQ0ggRk9SIEJFTkNITUFSS1MKKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKiBUaGlzIHByb2dyYW0gZGVtb25zdHJhdGVzIGFuZCBjb21wYXJlcyB0d28gc29ydGluZyBtZXRob2RzLiBJdCB1c2VzIHR3byAKKiBpZGVudGljYWwgYXJyYXlzIG9mIGVpZ2h0IGludGVnZXJzLCBkaXNwbGF5cyB0aGUgY29udGVudHMgb2YgZWFjaCBhcnJheSwgYW5kIAoqIHNvcnRzIHRoZW0uIEFmdGVyIGVhY2ggcGFzcyBvZiBib3RoIHNvcnRpbmcgYWxnb3JpdGhtcywgdGhlIHByb2dyYW0gZGlzcGxheXMgCiogdGhlIHVwZGF0ZWQgYXJyYXkuCiogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiogSU5QVVQKKiBOdW1iZXIJCS8vIE51bWJlciB0aGF0IGlzIGJlaW5nIHNlYXJjaGVkIGZvcgoqIAoqIE9VVFBVVAoqIExpbmVhcgkJLy8gQW1vdW50IG9mIGxpbmVhciBzZWFyY2ggY29tcGFyaXNvbnMKKiBCaW5hcnkJCS8vIEFtb3VudCBvZiBiaW5hcnkgc2VhcmNoIGNvbXBhcmlzb25zCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKLy8gRnVuY3Rpb24gcHJvdG90eXBlcwppbnQgbGluZWFyU2VhcmNoKGNvbnN0IGludCBbXSwgaW50LCBpbnQsIGludCAmKTsKaW50IGJpbmFyeVNlYXJjaChjb25zdCBpbnQgW10sIGludCwgaW50LCBpbnQgJik7CmludCBtYWluKCkKewogICAgLy8gSW5pdGlhbGl6ZSBWYXJpYWJsZXMKICAgIGNvbnN0IGludCBTSVpFID0gMjA7CiAgICBpbnQgbnVtYmVyc1tTSVpFXSA9CiAgICB7CiAgICAgICAgMTAsIDE1LCAyMCwgMjUsIDMwLCAzNSwgNDAsIDQ1LCA1MCwgNTUsCiAgICAgICAgNjAsIDY1LCA3MCwgNzUsIDgwLCA4NSwgOTAsIDk1LCAxMDAsIDEwNQogICAgfTsKICAgIGludCBzZWFyY2hWYWx1ZTsgICAgICAgICAgIC8vIFZhbHVlIHRvIHNlYXJjaCBmb3IKICAgIGludCBsaW5lYXJDb21wYXJpc29ucyA9IDA7IC8vIE51bWJlciBvZiBsaW5lYXIgc2VhcmNoIGNvbXBhcmlzb25zCiAgICBpbnQgYmluYXJ5Q29tcGFyaXNvbnMgPSAwOyAvLyBOdW1iZXIgb2YgYmluYXJ5IHNlYXJjaCBjb21wYXJpc29ucwogICAgaW50IGxpbmVhclJlc3VsdDsgICAgICAgICAgLy8gUmVzdWx0IG9mIGxpbmVhciBzZWFyY2gKICAgIGludCBiaW5hcnlSZXN1bHQ7ICAgICAgICAgIC8vIFJlc3VsdCBvZiBiaW5hcnkgc2VhcmNoCiAgICAvLyBBc2sgdGhlIHVzZXIgZm9yIGEgdmFsdWUgdG8gc2VhcmNoIGZvcgogICAgY291dCA8PCAiRW50ZXIgYW4gaW50ZWdlciB0byBzZWFyY2ggZm9yOiAiOwogICAgY2luID4+IHNlYXJjaFZhbHVlOwogICAgLy8gQ2FsbCB0aGUgbGluZWFyIHNlYXJjaCBmdW5jdGlvbgogICAgbGluZWFyUmVzdWx0ID0gbGluZWFyU2VhcmNoKG51bWJlcnMsIFNJWkUsIHNlYXJjaFZhbHVlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVhckNvbXBhcmlzb25zKTsKICAgIC8vIENhbGwgdGhlIGJpbmFyeSBzZWFyY2ggZnVuY3Rpb24KICAgIGJpbmFyeVJlc3VsdCA9IGJpbmFyeVNlYXJjaChudW1iZXJzLCBTSVpFLCBzZWFyY2hWYWx1ZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiaW5hcnlDb21wYXJpc29ucyk7CiAgICAvLyBEaXNwbGF5IHRoZSBzZWFyY2ggcmVzdWx0cwogICAgY291dCA8PCAiXG5TZWFyY2ggUmVzdWx0cyIgPDwgZW5kbDsKICAgIGNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSIgPDwgZW5kbDsKICAgIGlmIChsaW5lYXJSZXN1bHQgIT0gLTEpCiAgICB7CiAgICAgICAgY291dCA8PCAiVmFsdWUgZm91bmQ6ICIgPDwgc2VhcmNoVmFsdWUgPDwgZW5kbDsKICAgICAgICBjb3V0IDw8ICJMaW5lYXIgc2VhcmNoIGNvbXBhcmlzb25zOiAiCiAgICAgICAgICAgICA8PCBsaW5lYXJDb21wYXJpc29ucyA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgIkJpbmFyeSBzZWFyY2ggY29tcGFyaXNvbnM6ICIKICAgICAgICAgICAgIDw8IGJpbmFyeUNvbXBhcmlzb25zIDw8IGVuZGw7CiAgICB9CiAgICBlbHNlCiAgICB7CiAgICAgICAgY291dCA8PCAiVmFsdWUgd2FzIG5vdCBmb3VuZCBpbiB0aGUgYXJyYXkuIiA8PCBlbmRsOwogICAgICAgIGNvdXQgPDwgIkxpbmVhciBzZWFyY2ggY29tcGFyaXNvbnM6ICIKICAgICAgICAgICAgIDw8IGxpbmVhckNvbXBhcmlzb25zIDw8IGVuZGw7CiAgICAgICAgY291dCA8PCAiQmluYXJ5IHNlYXJjaCBjb21wYXJpc29uczogIgogICAgICAgICAgICAgPDwgYmluYXJ5Q29tcGFyaXNvbnMgPDwgZW5kbDsKICAgIH0KICAgIHJldHVybiAwOwp9Ci8vIEZ1bmN0aW9uIHRvIHBlcmZvcm0gYSBsaW5lYXIgc2VhcmNoCmludCBsaW5lYXJTZWFyY2goY29uc3QgaW50IGFycmF5W10sIGludCBzaXplLCBpbnQgdmFsdWUsCiAgICAgICAgICAgICAgICAgaW50ICZjb21wYXJpc29ucykKewogICAgZm9yIChpbnQgY291bnQgPSAwOyBjb3VudCA8IHNpemU7IGNvdW50KyspCiAgICB7CiAgICAgICAgY29tcGFyaXNvbnMrKzsKICAgICAgICBpZiAoYXJyYXlbY291bnRdID09IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIGNvdW50OwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAtMTsKfQovLyBGdW5jdGlvbiB0byBwZXJmb3JtIGEgYmluYXJ5IHNlYXJjaAppbnQgYmluYXJ5U2VhcmNoKGNvbnN0IGludCBhcnJheVtdLCBpbnQgc2l6ZSwgaW50IHZhbHVlLAogICAgICAgICAgICAgICAgIGludCAmY29tcGFyaXNvbnMpCnsKICAgIGludCBmaXJzdCA9IDA7CiAgICBpbnQgbGFzdCA9IHNpemUgLSAxOwogICAgaW50IG1pZGRsZTsKICAgIHdoaWxlIChmaXJzdCA8PSBsYXN0KQogICAgewogICAgICAgIG1pZGRsZSA9IChmaXJzdCArIGxhc3QpIC8gMjsKICAgICAgICBjb21wYXJpc29ucysrOwogICAgICAgIGlmIChhcnJheVttaWRkbGVdID09IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgcmV0dXJuIG1pZGRsZTsKICAgICAgICB9CiAgICAgICAgZWxzZSBpZiAoYXJyYXlbbWlkZGxlXSA+IHZhbHVlKQogICAgICAgIHsKICAgICAgICAgICAgbGFzdCA9IG1pZGRsZSAtIDE7CiAgICAgICAgfQogICAgICAgIGVsc2UKICAgICAgICB7CiAgICAgICAgICAgIGZpcnN0ID0gbWlkZGxlICsgMTsKICAgICAgICB9CiAgICB9CiAgICByZXR1cm4gLTE7Cn0=