#include <iostream>
struct FParams
{
int* inputArray;
int length;
int passStartIndex;
int currentIndex;
};
void bubbleSort(FParams* fp)
{
if (fp->passStartIndex == fp->length - 1) return;
if (fp->currentIndex == fp->length - 1)
{
fp->passStartIndex++;
fp->currentIndex = 0;
return bubbleSort(fp);
}
//compare items at current index and current index + 1 and swap if required
if(fp->inputArray[fp->currentIndex] > fp->inputArray[fp->currentIndex + 1])
{
int temp = fp->inputArray[fp->currentIndex + 1];
fp->inputArray[fp->currentIndex + 1] = fp->inputArray[fp->currentIndex];
fp->inputArray[fp->currentIndex] = temp;
}
fp->currentIndex++;
return bubbleSort(fp);
}
int main()
{
FParams fp;
fp.length = 200;
fp.inputArray = new int[fp.length];
fp.passStartIndex = 0;
fp.currentIndex = 0;
// create array that is sorted in descending order:
for (int i = 0; i < fp.length; ++i)
fp.inputArray[i] = fp.length - i;
// bubble sort recursion:
bubbleSort(&fp);
// print sorted array:
for (int i = 0; i < fp.length; ++i)
std::cout << fp.inputArray[i] << ' ';
delete[] fp.inputArray;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKc3RydWN0IEZQYXJhbXMKewogICAgaW50KiBpbnB1dEFycmF5OwogICAgaW50IGxlbmd0aDsKICAgIGludCBwYXNzU3RhcnRJbmRleDsKICAgIGludCBjdXJyZW50SW5kZXg7Cn07Cgp2b2lkIGJ1YmJsZVNvcnQoRlBhcmFtcyogZnApCnsKICAgIGlmIChmcC0+cGFzc1N0YXJ0SW5kZXggPT0gZnAtPmxlbmd0aCAtIDEpIHJldHVybjsKICAgIGlmIChmcC0+Y3VycmVudEluZGV4ID09IGZwLT5sZW5ndGggLSAxKQogICAgewogICAgICAgIGZwLT5wYXNzU3RhcnRJbmRleCsrOwogICAgICAgIGZwLT5jdXJyZW50SW5kZXggPSAwOwogICAgICAgIHJldHVybiBidWJibGVTb3J0KGZwKTsKICAgIH0KCiAgICAvL2NvbXBhcmUgaXRlbXMgYXQgY3VycmVudCBpbmRleCBhbmQgY3VycmVudCBpbmRleCArIDEgYW5kIHN3YXAgaWYgcmVxdWlyZWQKICAgIGlmKGZwLT5pbnB1dEFycmF5W2ZwLT5jdXJyZW50SW5kZXhdID4gZnAtPmlucHV0QXJyYXlbZnAtPmN1cnJlbnRJbmRleCArIDFdKQogICAgewogICAgICAgIGludCB0ZW1wID0gZnAtPmlucHV0QXJyYXlbZnAtPmN1cnJlbnRJbmRleCArIDFdOwogICAgICAgIGZwLT5pbnB1dEFycmF5W2ZwLT5jdXJyZW50SW5kZXggKyAxXSA9IGZwLT5pbnB1dEFycmF5W2ZwLT5jdXJyZW50SW5kZXhdOwogICAgICAgIGZwLT5pbnB1dEFycmF5W2ZwLT5jdXJyZW50SW5kZXhdID0gdGVtcDsKICAgIH0KCiAgICBmcC0+Y3VycmVudEluZGV4Kys7CiAgICByZXR1cm4gYnViYmxlU29ydChmcCk7Cn0KCmludCBtYWluKCkKewogICAgRlBhcmFtcyBmcDsKICAgIGZwLmxlbmd0aCA9IDIwMDsKICAgIGZwLmlucHV0QXJyYXkgPSBuZXcgaW50W2ZwLmxlbmd0aF07CiAgICBmcC5wYXNzU3RhcnRJbmRleCA9IDA7CiAgICBmcC5jdXJyZW50SW5kZXggPSAwOwoKICAgIC8vIGNyZWF0ZSBhcnJheSB0aGF0IGlzIHNvcnRlZCBpbiBkZXNjZW5kaW5nIG9yZGVyOgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcC5sZW5ndGg7ICsraSkKICAgICAgICBmcC5pbnB1dEFycmF5W2ldID0gZnAubGVuZ3RoIC0gaTsKCiAgICAvLyBidWJibGUgc29ydCByZWN1cnNpb246CiAgICBidWJibGVTb3J0KCZmcCk7CgogICAgLy8gcHJpbnQgc29ydGVkIGFycmF5OgogICAgZm9yIChpbnQgaSA9IDA7IGkgPCBmcC5sZW5ndGg7ICsraSkKICAgICAgICBzdGQ6OmNvdXQgPDwgZnAuaW5wdXRBcnJheVtpXSA8PCAnICc7CgogICAgZGVsZXRlW10gZnAuaW5wdXRBcnJheTsKfQo=