//Devin Scheu CS1A Chapter 8, P. 488, #9
//
/**************************************************************
*
* BENCHMARK BUBBLE AND SELECTION SORT EXCHANGES
* ____________________________________________________________
* This program determines the number of exchanges made by
* bubble sort and selection sort on two identical arrays.
* ____________________________________________________________
* INPUT
* None
*
* OUTPUT
* bubbleExchanges : The number of exchanges for bubble sort
* selectionExchanges : The number of exchanges for selection sort
*
**************************************************************/
#include <iostream>
#include <iomanip>
using namespace std;
// Function for bubble sort with exchange count
void bubbleSort(int arr[], int size, int& exchanges) {
exchanges = 0;
for (int i = 0; i < size - 1; i++) {
for (int j = 0; j < size - i - 1; j++) {
if (arr[j] > arr[j + 1]) {
int temp = arr[j];
arr[j] = arr[j + 1];
arr[j + 1] = temp;
exchanges++;
}
}
}
}
// Function for selection sort with exchange count
void selectionSort(int arr[], int size, int& exchanges) {
exchanges = 0;
for (int i = 0; i < size - 1; i++) {
int minIndex = i;
for (int j = i + 1; j < size; j++) {
if (arr[j] < arr[minIndex]) {
minIndex = j;
}
}
if (minIndex != i) {
int temp = arr[i];
arr[i] = arr[minIndex];
arr[minIndex] = temp;
exchanges++;
}
}
}
int main () {
//Variable Declarations
const int ARRAY_SIZE = 20; //OUTPUT - Size of the arrays
int array1[ARRAY_SIZE] = {5, 7, 2, 8, 9, 1, 0, 4, 3, 6, 10, 12, 14, 16, 18, 11, 13, 15, 17, 19};
int array2[ARRAY_SIZE]; //OUTPUT - Copy of array for selection sort
int bubbleExchanges; //OUTPUT - The number of exchanges for bubble sort
int selectionExchanges; //OUTPUT - The number of exchanges for selection sort
//Copy array for independent sorting
for (int i = 0; i < ARRAY_SIZE; i++) {
array2[i] = array1[i];
}
//Perform Bubble Sort
bubbleSort(array1, ARRAY_SIZE, bubbleExchanges);
//Perform Selection Sort
selectionSort(array2, ARRAY_SIZE, selectionExchanges);
//Separator and Output Section
cout << "-------------------------------------------------------" << endl;
cout << "OUTPUT:" << endl;
//Output Result
cout << left << setw(25) << "Bubble Sort Exchanges:" << right << setw(15) << bubbleExchanges << endl;
cout << left << setw(25) << "Selection Sort Exchanges:" << right << setw(15) << selectionExchanges << endl;
} //end of main()
Ly9EZXZpbiBTY2hldSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDUzFBICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ2hhcHRlciA4LCBQLiA0ODgsICM5Ci8vCi8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgoqCiogQkVOQ0hNQVJLIEJVQkJMRSBBTkQgU0VMRUNUSU9OIFNPUlQgRVhDSEFOR0VTCiogX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiogVGhpcyBwcm9ncmFtIGRldGVybWluZXMgdGhlIG51bWJlciBvZiBleGNoYW5nZXMgbWFkZSBieQoqIGJ1YmJsZSBzb3J0IGFuZCBzZWxlY3Rpb24gc29ydCBvbiB0d28gaWRlbnRpY2FsIGFycmF5cy4KKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KKiBJTlBVVAoqIE5vbmUKKgoqIE9VVFBVVAoqIGJ1YmJsZUV4Y2hhbmdlcyA6IFRoZSBudW1iZXIgb2YgZXhjaGFuZ2VzIGZvciBidWJibGUgc29ydAoqIHNlbGVjdGlvbkV4Y2hhbmdlcyA6IFRoZSBudW1iZXIgb2YgZXhjaGFuZ2VzIGZvciBzZWxlY3Rpb24gc29ydAoqCioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwoKI2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8aW9tYW5pcD4KCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgovLyBGdW5jdGlvbiBmb3IgYnViYmxlIHNvcnQgd2l0aCBleGNoYW5nZSBjb3VudAp2b2lkIGJ1YmJsZVNvcnQoaW50IGFycltdLCBpbnQgc2l6ZSwgaW50JiBleGNoYW5nZXMpIHsKICAgIGV4Y2hhbmdlcyA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemUgLSAxOyBpKyspIHsKICAgICAgICBmb3IgKGludCBqID0gMDsgaiA8IHNpemUgLSBpIC0gMTsgaisrKSB7CiAgICAgICAgICAgIGlmIChhcnJbal0gPiBhcnJbaiArIDFdKSB7CiAgICAgICAgICAgICAgICBpbnQgdGVtcCA9IGFycltqXTsKICAgICAgICAgICAgICAgIGFycltqXSA9IGFycltqICsgMV07CiAgICAgICAgICAgICAgICBhcnJbaiArIDFdID0gdGVtcDsKICAgICAgICAgICAgICAgIGV4Y2hhbmdlcysrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQp9CgovLyBGdW5jdGlvbiBmb3Igc2VsZWN0aW9uIHNvcnQgd2l0aCBleGNoYW5nZSBjb3VudAp2b2lkIHNlbGVjdGlvblNvcnQoaW50IGFycltdLCBpbnQgc2l6ZSwgaW50JiBleGNoYW5nZXMpIHsKICAgIGV4Y2hhbmdlcyA9IDA7CiAgICBmb3IgKGludCBpID0gMDsgaSA8IHNpemUgLSAxOyBpKyspIHsKICAgICAgICBpbnQgbWluSW5kZXggPSBpOwogICAgICAgIGZvciAoaW50IGogPSBpICsgMTsgaiA8IHNpemU7IGorKykgewogICAgICAgICAgICBpZiAoYXJyW2pdIDwgYXJyW21pbkluZGV4XSkgewogICAgICAgICAgICAgICAgbWluSW5kZXggPSBqOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGlmIChtaW5JbmRleCAhPSBpKSB7CiAgICAgICAgICAgIGludCB0ZW1wID0gYXJyW2ldOwogICAgICAgICAgICBhcnJbaV0gPSBhcnJbbWluSW5kZXhdOwogICAgICAgICAgICBhcnJbbWluSW5kZXhdID0gdGVtcDsKICAgICAgICAgICAgZXhjaGFuZ2VzKys7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbiAoKSB7CgkKCS8vVmFyaWFibGUgRGVjbGFyYXRpb25zCgljb25zdCBpbnQgQVJSQVlfU0laRSA9IDIwOyAgICAgICAgICAgICAgICAgICAgICAgIC8vT1VUUFVUICAgICAtIFNpemUgb2YgdGhlIGFycmF5cwoJaW50IGFycmF5MVtBUlJBWV9TSVpFXSA9IHs1LCA3LCAyLCA4LCA5LCAxLCAwLCA0LCAzLCA2LCAxMCwgMTIsIDE0LCAxNiwgMTgsIDExLCAxMywgMTUsIDE3LCAxOX07CglpbnQgYXJyYXkyW0FSUkFZX1NJWkVdOyAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT1VUUFVUICAgICAtIENvcHkgb2YgYXJyYXkgZm9yIHNlbGVjdGlvbiBzb3J0CglpbnQgYnViYmxlRXhjaGFuZ2VzOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vT1VUUFVUICAgICAtIFRoZSBudW1iZXIgb2YgZXhjaGFuZ2VzIGZvciBidWJibGUgc29ydAoJaW50IHNlbGVjdGlvbkV4Y2hhbmdlczsgICAgICAgICAgICAgICAgICAgICAgICAgICAvL09VVFBVVCAgICAgLSBUaGUgbnVtYmVyIG9mIGV4Y2hhbmdlcyBmb3Igc2VsZWN0aW9uIHNvcnQKCgkvL0NvcHkgYXJyYXkgZm9yIGluZGVwZW5kZW50IHNvcnRpbmcKCWZvciAoaW50IGkgPSAwOyBpIDwgQVJSQVlfU0laRTsgaSsrKSB7CgkJYXJyYXkyW2ldID0gYXJyYXkxW2ldOwoJfQoJCgkvL1BlcmZvcm0gQnViYmxlIFNvcnQKCWJ1YmJsZVNvcnQoYXJyYXkxLCBBUlJBWV9TSVpFLCBidWJibGVFeGNoYW5nZXMpOwoJCgkvL1BlcmZvcm0gU2VsZWN0aW9uIFNvcnQKCXNlbGVjdGlvblNvcnQoYXJyYXkyLCBBUlJBWV9TSVpFLCBzZWxlY3Rpb25FeGNoYW5nZXMpOwoJCgkvL1NlcGFyYXRvciBhbmQgT3V0cHV0IFNlY3Rpb24KCWNvdXQgPDwgIi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0iIDw8IGVuZGw7Cgljb3V0IDw8ICJPVVRQVVQ6IiA8PCBlbmRsOwoJCgkvL091dHB1dCBSZXN1bHQKCWNvdXQgPDwgbGVmdCA8PCBzZXR3KDI1KSA8PCAiQnViYmxlIFNvcnQgRXhjaGFuZ2VzOiIgPDwgcmlnaHQgPDwgc2V0dygxNSkgPDwgYnViYmxlRXhjaGFuZ2VzIDw8IGVuZGw7Cgljb3V0IDw8IGxlZnQgPDwgc2V0dygyNSkgPDwgIlNlbGVjdGlvbiBTb3J0IEV4Y2hhbmdlczoiIDw8IHJpZ2h0IDw8IHNldHcoMTUpIDw8IHNlbGVjdGlvbkV4Y2hhbmdlcyA8PCBlbmRsOwoJCn0gLy9lbmQgb2YgbWFpbigp