// Nathanael Schwartz CS1A Chapter 8, P. 515, #9
//
/*******************************************************************************
*
* BUBBLE SORT AND SELECTION SORT WITH EXCHANGE COUNTS
* _____________________________________________________________________________
* This program uses two identical arrays of integers, sorts one using the bubble
* sort algorithm and the other using the selection sort algorithm. The program
* keeps a count of the number of exchanges made by each sorting algorithm.
* _____________________________________________________________________________
* INPUT
* arr1 : Array to be sorted using bubble sort
* arr2 : Array to be sorted using selection sort
*
* OUTPUT
* bubbleExchanges : Number of exchanges made by the bubble sort
* selectionExchanges : Number of exchanges made by the selection sort
*
******************************************************************************/
#include <iostream>
using namespace std;
// Bubble Sort function
void bubbleSort(int arr[], int size, int &exchangeCount) {
for (int i = 0; i < size - 1; ++i) {
for (int j = 0; j < size - i - 1; ++j) {
if (arr[j] > arr[j + 1]) {
// Swap and count the exchange
swap(arr[j], arr[j + 1]);
++exchangeCount;
}
}
}
}
// Selection Sort function
void selectionSort(int arr[], int size, int &exchangeCount) {
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;
}
}
// Swap and count the exchange
if (minIndex != i) {
swap(arr[i], arr[minIndex]);
++exchangeCount;
}
}
}
int main() {
// Initialize two identical arrays of integers
int arr1[20] = {12, 3, 5, 7, 19, 2, 13, 18, 8, 4, 14, 1, 6, 15, 11, 17, 9, 20, 10, 16};
int arr2[20] = {12, 3, 5, 7, 19, 2, 13, 18, 8, 4, 14, 1, 6, 15, 11, 17, 9, 20, 10, 16};
int bubbleExchanges = 0;
int selectionExchanges = 0;
// Perform bubble sort on the first array and count exchanges
bubbleSort(arr1, 20, bubbleExchanges);
// Perform selection sort on the second array and count exchanges
selectionSort(arr2, 20, selectionExchanges);
// Display the results
cout << "Bubble Sort Exchange Count: " << bubbleExchanges << endl;
cout << "Selection Sort Exchange Count: " << selectionExchanges << endl;
return 0;
}
Ly8gTmF0aGFuYWVsIFNjaHdhcnR6ICAgICAgICAgICAgICAgICBDUzFBICAgICAgICAgICAgICAgICBDaGFwdGVyIDgsIFAuIDUxNSwgIzkKLy8KLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKICoKICogQlVCQkxFIFNPUlQgQU5EIFNFTEVDVElPTiBTT1JUIFdJVEggRVhDSEFOR0UgQ09VTlRTCiAqIF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCiAqIFRoaXMgcHJvZ3JhbSB1c2VzIHR3byBpZGVudGljYWwgYXJyYXlzIG9mIGludGVnZXJzLCBzb3J0cyBvbmUgdXNpbmcgdGhlIGJ1YmJsZQogKiBzb3J0IGFsZ29yaXRobSBhbmQgdGhlIG90aGVyIHVzaW5nIHRoZSBzZWxlY3Rpb24gc29ydCBhbGdvcml0aG0uIFRoZSBwcm9ncmFtCiAqIGtlZXBzIGEgY291bnQgb2YgdGhlIG51bWJlciBvZiBleGNoYW5nZXMgbWFkZSBieSBlYWNoIHNvcnRpbmcgYWxnb3JpdGhtLgogKiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwogKiBJTlBVVAogKiAgIGFycjEgICAgICAgICAgICA6IEFycmF5IHRvIGJlIHNvcnRlZCB1c2luZyBidWJibGUgc29ydAogKiAgIGFycjIgICAgICAgICAgICA6IEFycmF5IHRvIGJlIHNvcnRlZCB1c2luZyBzZWxlY3Rpb24gc29ydAogKgogKiBPVVRQVVQKICogICBidWJibGVFeGNoYW5nZXMgOiBOdW1iZXIgb2YgZXhjaGFuZ2VzIG1hZGUgYnkgdGhlIGJ1YmJsZSBzb3J0CiAqICAgc2VsZWN0aW9uRXhjaGFuZ2VzIDogTnVtYmVyIG9mIGV4Y2hhbmdlcyBtYWRlIGJ5IHRoZSBzZWxlY3Rpb24gc29ydAogKgogKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwogI2luY2x1ZGUgPGlvc3RyZWFtPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwoKLy8gQnViYmxlIFNvcnQgZnVuY3Rpb24Kdm9pZCBidWJibGVTb3J0KGludCBhcnJbXSwgaW50IHNpemUsIGludCAmZXhjaGFuZ2VDb3VudCkgewogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBzaXplIC0gMTsgKytpKSB7CiAgICAgICAgZm9yIChpbnQgaiA9IDA7IGogPCBzaXplIC0gaSAtIDE7ICsraikgewogICAgICAgICAgICBpZiAoYXJyW2pdID4gYXJyW2ogKyAxXSkgewogICAgICAgICAgICAgICAgLy8gU3dhcCBhbmQgY291bnQgdGhlIGV4Y2hhbmdlCiAgICAgICAgICAgICAgICBzd2FwKGFycltqXSwgYXJyW2ogKyAxXSk7CiAgICAgICAgICAgICAgICArK2V4Y2hhbmdlQ291bnQ7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICB9Cn0KCi8vIFNlbGVjdGlvbiBTb3J0IGZ1bmN0aW9uCnZvaWQgc2VsZWN0aW9uU29ydChpbnQgYXJyW10sIGludCBzaXplLCBpbnQgJmV4Y2hhbmdlQ291bnQpIHsKICAgIGZvciAoaW50IGkgPSAwOyBpIDwgc2l6ZSAtIDE7ICsraSkgewogICAgICAgIGludCBtaW5JbmRleCA9IGk7CiAgICAgICAgZm9yIChpbnQgaiA9IGkgKyAxOyBqIDwgc2l6ZTsgKytqKSB7CiAgICAgICAgICAgIGlmIChhcnJbal0gPCBhcnJbbWluSW5kZXhdKSB7CiAgICAgICAgICAgICAgICBtaW5JbmRleCA9IGo7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgLy8gU3dhcCBhbmQgY291bnQgdGhlIGV4Y2hhbmdlCiAgICAgICAgaWYgKG1pbkluZGV4ICE9IGkpIHsKICAgICAgICAgICAgc3dhcChhcnJbaV0sIGFyclttaW5JbmRleF0pOwogICAgICAgICAgICArK2V4Y2hhbmdlQ291bnQ7CiAgICAgICAgfQogICAgfQp9CgppbnQgbWFpbigpIHsKICAgIC8vIEluaXRpYWxpemUgdHdvIGlkZW50aWNhbCBhcnJheXMgb2YgaW50ZWdlcnMKICAgIGludCBhcnIxWzIwXSA9IHsxMiwgMywgNSwgNywgMTksIDIsIDEzLCAxOCwgOCwgNCwgMTQsIDEsIDYsIDE1LCAxMSwgMTcsIDksIDIwLCAxMCwgMTZ9OwogICAgaW50IGFycjJbMjBdID0gezEyLCAzLCA1LCA3LCAxOSwgMiwgMTMsIDE4LCA4LCA0LCAxNCwgMSwgNiwgMTUsIDExLCAxNywgOSwgMjAsIDEwLCAxNn07CgogICAgaW50IGJ1YmJsZUV4Y2hhbmdlcyA9IDA7CiAgICBpbnQgc2VsZWN0aW9uRXhjaGFuZ2VzID0gMDsKCiAgICAvLyBQZXJmb3JtIGJ1YmJsZSBzb3J0IG9uIHRoZSBmaXJzdCBhcnJheSBhbmQgY291bnQgZXhjaGFuZ2VzCiAgICBidWJibGVTb3J0KGFycjEsIDIwLCBidWJibGVFeGNoYW5nZXMpOwoKICAgIC8vIFBlcmZvcm0gc2VsZWN0aW9uIHNvcnQgb24gdGhlIHNlY29uZCBhcnJheSBhbmQgY291bnQgZXhjaGFuZ2VzCiAgICBzZWxlY3Rpb25Tb3J0KGFycjIsIDIwLCBzZWxlY3Rpb25FeGNoYW5nZXMpOwoKICAgIC8vIERpc3BsYXkgdGhlIHJlc3VsdHMKICAgIGNvdXQgPDwgIkJ1YmJsZSBTb3J0IEV4Y2hhbmdlIENvdW50OiAiIDw8IGJ1YmJsZUV4Y2hhbmdlcyA8PCBlbmRsOwogICAgY291dCA8PCAiU2VsZWN0aW9uIFNvcnQgRXhjaGFuZ2UgQ291bnQ6ICIgPDwgc2VsZWN0aW9uRXhjaGFuZ2VzIDw8IGVuZGw7CgogICAgcmV0dXJuIDA7Cn0KCiAK