```/*
* =====================================================================================
*
*       Filename:  ex_1905.cpp
*
*    Description:  Exercise 19.06 - Bubble Sort
*
*        Version:  1.1
*        Created:  08/03/17 17:31:58
*       Revision:  19/02/18 13:40:00
*       Compiler:  g++
*
*         Author:  Siidney Watson - [email protected]
*
* =====================================================================================
*/
#include <iostream>
#include <vector>
#include <random>

// print a vector
template <typename T>
void printVector(const std::vector<T>& data) {
for (T elem : data) { std::cout << elem << " "; }

std::cout << std::endl;
}

void bubbleSort(std::vector<int>&);

int main(int argc, const char* argv[]) {
const size_t limit = 100;
const size_t vecSize = 20;
std::vector<int> intVec;

std::random_device rd;
std::mt19937 gen(rd());

// randomise elements of intVec
for (size_t i = 0; i < vecSize; ++i) {
intVec.push_back(std::uniform_int_distribution<int>{0, limit}(gen));
}

std::cout << "\nBefore sorting:" << std::endl;
printVector(intVec);

bubbleSort(intVec);

std::cout << "\nAfter Sorting:" << std::endl;
printVector(intVec);

return 0;
}
// bubble sort vector
void bubbleSort(std::vector<int>& intVec) {
size_t size = intVec.size();
bool swap = false;

for (size_t i = 0; i < size - 1; swap = false, ++i) {
for (size_t j = 0; j < size - i - 1; ++j) {
// reverse comparison for reverse ordered sorting
if (intVec[j] > intVec[j + 1]) {
int tmp = intVec[j];

intVec[j] = intVec[j + 1];
intVec[j + 1] = tmp;

swap = true;
}
}
if (!swap) { break; }
}
}
```