//Diego Martinez CSC5 Chapter 8, P.487, #9
/*******************************************************************************
* COMPARING SORTING ALGORITHM BENNCHMARKS
* ______________________________________________________________________________
* This program compares the performance of the bubble sort and selection sort
* algorithms by sorting two identical arrays of 20 integers in ascending order.
*
* Computation is based on the Formula:
* Comparing and exchanging array elements while sorting the numbers in
* ascending order using the Bubble Sort and Selection Sort algorithms.
*______________________________________________________________________________
* INPUT
* A predefined array of 20 integer values stored in the program
* no user input is required
* OUTPUT
* The total number of exchanges made by the Bubble Sort algorithm
* The total number of exchanges made by the Selection Sort algorithm
*******************************************************************************/
#include <iostream>
using namespace std;
// Function Prototypes
void bubbleSort(int array[], int size, int &exchanges);
void selectionSort(int array[], int size, int & exchanges);
int main()
{
const int SIZE = 20;
// Original array
int numbers[SIZE] = {
45, 23, 67, 12, 89,
34, 90, 11, 56, 78,
2, 99, 41, 65, 18,
73, 27, 50, 6, 81
};
// Copy arrays
int bubbleArray[SIZE];
int selectionArray[SIZE];
// Copy values into both arrays
for (int i = 0; i < SIZE; i++)
{
bubbleArray[i] = numbers[i];
selectionArray[i] = numbers[i];
}
int bubbleExchanges = 0;
int selectionExchanges = 0;
// Call Sorting Functions
bubbleSort(bubbleArray, SIZE, bubbleExchanges);
selectionSort(selectionArray, SIZE, selectionExchanges);
// Display results
cout << "Bubble Sort Exchanges: " << bubbleExchanges << endl;
cout << "Selection Sort Exchanges: " << selectionExchanges << endl;
return 0;
}
// Bubble Sort Function
void bubbleSort(int array[], int size, int & exchanges)
{
int temp;
for (int maxElement = size - 1; maxElement > 0; maxElement--)
{
for (int index = 0; index < maxElement; index++)
{
if (array[index] > array[index + 1])
{
temp = array [index];
array[index] = array[index + 1];
array[index + 1] = temp;
exchanges++;
}
}
}
}
// Selection Sort Function
void selectionSort(int array[], int size, int & exchanges)
{
int minIndex, minValue;
for (int start = 0; start < (size -1); start++)
{
minIndex = start;
minValue = array[start];
for (int index = start +1; index < size; index++)
{
if (array[index] < minValue)
{
minValue = array[index];
minIndex = index;
}
}
if (minIndex != start)
{
array[minIndex] = array[start];
array[start] = minValue;
exchanges++;
}
}
}
Ly9EaWVnbyBNYXJ0aW5legkJCQkJQ1NDNQkJCQkgICAgQ2hhcHRlciA4LCBQLjQ4NywgIzkKLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKiAgQ09NUEFSSU5HIFNPUlRJTkcgQUxHT1JJVEhNIEJFTk5DSE1BUktTCiogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiogVGhpcyBwcm9ncmFtIGNvbXBhcmVzIHRoZSBwZXJmb3JtYW5jZSAgb2YgdGhlIGJ1YmJsZSBzb3J0IGFuZCBzZWxlY3Rpb24gc29ydCAKKiBhbGdvcml0aG1zIGJ5IHNvcnRpbmcgdHdvIGlkZW50aWNhbCBhcnJheXMgb2YgMjAgaW50ZWdlcnMgaW4gYXNjZW5kaW5nIG9yZGVyLgoqIAoqIENvbXB1dGF0aW9uIGlzIGJhc2VkIG9uIHRoZSBGb3JtdWxhOgoqCUNvbXBhcmluZyBhbmQgZXhjaGFuZ2luZyBhcnJheSBlbGVtZW50cyB3aGlsZSBzb3J0aW5nIHRoZSBudW1iZXJzIGluIAoqIGFzY2VuZGluZyBvcmRlciB1c2luZyB0aGUgQnViYmxlIFNvcnQgYW5kIFNlbGVjdGlvbiBTb3J0IGFsZ29yaXRobXMuIAoqX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiogSU5QVVQKKglBIHByZWRlZmluZWQgYXJyYXkgb2YgMjAgaW50ZWdlciB2YWx1ZXMgc3RvcmVkIGluIHRoZSBwcm9ncmFtCQoqCW5vIHVzZXIgaW5wdXQgaXMgcmVxdWlyZWQgCiogT1VUUFVUCioJVGhlIHRvdGFsIG51bWJlciBvZiBleGNoYW5nZXMgbWFkZSBieSB0aGUgQnViYmxlIFNvcnQgYWxnb3JpdGhtCioJVGhlIHRvdGFsIG51bWJlciBvZiBleGNoYW5nZXMgbWFkZSBieSB0aGUgU2VsZWN0aW9uIFNvcnQgYWxnb3JpdGhtIAoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwojaW5jbHVkZSA8aW9zdHJlYW0+CnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgoJLy8gRnVuY3Rpb24gUHJvdG90eXBlcwoJdm9pZCBidWJibGVTb3J0KGludCBhcnJheVtdLCBpbnQgc2l6ZSwgaW50ICZleGNoYW5nZXMpOwoJdm9pZCBzZWxlY3Rpb25Tb3J0KGludCBhcnJheVtdLCBpbnQgc2l6ZSwgaW50ICYgZXhjaGFuZ2VzKTsKCQppbnQgbWFpbigpCnsKCQpjb25zdCBpbnQgU0laRSA9IDIwOwoKLy8gT3JpZ2luYWwgYXJyYXkKaW50IG51bWJlcnNbU0laRV0gPSB7Cgk0NSwgMjMsIDY3LCAxMiwgODksCgkzNCwgOTAsIDExLCA1NiwgNzgsCgkyLCA5OSwgNDEsIDY1LCAxOCwKCTczLCAyNywgNTAsIDYsIDgxCn07CgovLyBDb3B5IGFycmF5cwppbnQgYnViYmxlQXJyYXlbU0laRV07CmludCBzZWxlY3Rpb25BcnJheVtTSVpFXTsKCi8vIENvcHkgdmFsdWVzIGludG8gYm90aCBhcnJheXMKZm9yIChpbnQgaSA9IDA7IGkgPCBTSVpFOyBpKyspCnsKCWJ1YmJsZUFycmF5W2ldID0gbnVtYmVyc1tpXTsKCXNlbGVjdGlvbkFycmF5W2ldID0gbnVtYmVyc1tpXTsKfQppbnQgYnViYmxlRXhjaGFuZ2VzID0gMDsKaW50IHNlbGVjdGlvbkV4Y2hhbmdlcyA9IDA7CgovLyBDYWxsIFNvcnRpbmcgRnVuY3Rpb25zCmJ1YmJsZVNvcnQoYnViYmxlQXJyYXksIFNJWkUsIGJ1YmJsZUV4Y2hhbmdlcyk7CnNlbGVjdGlvblNvcnQoc2VsZWN0aW9uQXJyYXksIFNJWkUsIHNlbGVjdGlvbkV4Y2hhbmdlcyk7CgovLyBEaXNwbGF5IHJlc3VsdHMKY291dCA8PCAiQnViYmxlIFNvcnQgRXhjaGFuZ2VzOiAiIDw8IGJ1YmJsZUV4Y2hhbmdlcyA8PCBlbmRsOwpjb3V0IDw8ICJTZWxlY3Rpb24gU29ydCBFeGNoYW5nZXM6ICIgPDwgc2VsZWN0aW9uRXhjaGFuZ2VzIDw8IGVuZGw7CgpyZXR1cm4gMDsKfQovLyBCdWJibGUgU29ydCBGdW5jdGlvbgp2b2lkIGJ1YmJsZVNvcnQoaW50IGFycmF5W10sIGludCBzaXplLCBpbnQgJiBleGNoYW5nZXMpCnsKCWludCB0ZW1wOwoJZm9yIChpbnQgbWF4RWxlbWVudCA9IHNpemUgLSAxOyBtYXhFbGVtZW50ID4gMDsgbWF4RWxlbWVudC0tKQoJewoJCWZvciAoaW50IGluZGV4ID0gMDsgaW5kZXggPCBtYXhFbGVtZW50OyBpbmRleCsrKQoJCXsKCQkJaWYgKGFycmF5W2luZGV4XSA+IGFycmF5W2luZGV4ICsgMV0pCgkJCXsKCQkJCXRlbXAgPSBhcnJheSBbaW5kZXhdOwoJCQkJYXJyYXlbaW5kZXhdID0gYXJyYXlbaW5kZXggKyAxXTsKCQkJCWFycmF5W2luZGV4ICsgMV0gPSB0ZW1wOwoJCQkJZXhjaGFuZ2VzKys7CgkJCX0KCQl9Cgl9Cn0KLy8gU2VsZWN0aW9uIFNvcnQgRnVuY3Rpb24Kdm9pZCBzZWxlY3Rpb25Tb3J0KGludCBhcnJheVtdLCBpbnQgc2l6ZSwgaW50ICYgZXhjaGFuZ2VzKQp7CglpbnQgbWluSW5kZXgsIG1pblZhbHVlOwoJZm9yIChpbnQgc3RhcnQgPSAwOyBzdGFydCA8IChzaXplIC0xKTsgc3RhcnQrKykKCXsKCQltaW5JbmRleCA9IHN0YXJ0OwoJCW1pblZhbHVlID0gYXJyYXlbc3RhcnRdOwoJCQoJCWZvciAoaW50IGluZGV4ID0gc3RhcnQgKzE7IGluZGV4IDwgc2l6ZTsgaW5kZXgrKykKCQl7CgkJCWlmIChhcnJheVtpbmRleF0gPCBtaW5WYWx1ZSkKCQkJewoJCQkJbWluVmFsdWUgPSBhcnJheVtpbmRleF07CgkJCQltaW5JbmRleCA9IGluZGV4OwoJCQl9CgkJfQoJaWYgKG1pbkluZGV4ICE9IHN0YXJ0KQkKCXsKCQlhcnJheVttaW5JbmRleF0gPSBhcnJheVtzdGFydF07CgkJYXJyYXlbc3RhcnRdID0gbWluVmFsdWU7CgkJCgkJZXhjaGFuZ2VzKys7Cgl9Cgl9Cn0=