#include <iostream>
#include <vector>
#include <chrono>
#include <cstdlib>
#include <ctime>
using namespace std;
struct Timer {
std::chrono::high_resolution_clock::time_point start;
Timer() : start(std::chrono::high_resolution_clock::now()) {}
~Timer() {
auto stop = std::chrono::high_resolution_clock::now();
auto duration = std::chrono::duration_cast<std::chrono::milliseconds>(stop - start);
std::cout << "Time: " << duration.count() << " ms\n";
}
};
template<typename T>
void bubble(vector<T>& arr){
Timer t;
int n = arr.size();
for(int i=0; i<n-1; i++){
for(int j=0; j<n-i-1; j++){
if(arr[j]> arr[j+1]){
T temp = arr[j];
arr[j] = arr[j+1];
arr[j+1] = temp;
}
}
}
}
template<typename T>
void print(vector<T>& arr){
for(int i=0; i< arr.size(); i++){
cout << arr[i] << " ";
}
cout << endl;
}
int main() {
int n;
cin>>n;
vector<int> arr(n);
for(int i=0; i<n; i++){
cin >> arr[i];
}
bubble(arr);
print(arr);
srand(time(0));
vector<int> arr1(100);
for(int i=0; i<100; i++){
arr1[i] = rand() % 100;
}
bubble(arr1);
bubble(arr1);
print(arr1);
vector<int> arr2(30000);
for(int i=0; i<30000; i++){
arr2[i] = rand() % 1000;
}
bubble(arr2);
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgojaW5jbHVkZSA8Y2hyb25vPgojaW5jbHVkZSA8Y3N0ZGxpYj4KI2luY2x1ZGUgPGN0aW1lPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwpzdHJ1Y3QgVGltZXIgewogICAgc3RkOjpjaHJvbm86OmhpZ2hfcmVzb2x1dGlvbl9jbG9jazo6dGltZV9wb2ludCBzdGFydDsKICAgIFRpbWVyKCkgOiBzdGFydChzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKSkge30KICAgIH5UaW1lcigpIHsKICAgICAgICBhdXRvIHN0b3AgPSBzdGQ6OmNocm9ubzo6aGlnaF9yZXNvbHV0aW9uX2Nsb2NrOjpub3coKTsKICAgICAgICBhdXRvIGR1cmF0aW9uID0gc3RkOjpjaHJvbm86OmR1cmF0aW9uX2Nhc3Q8c3RkOjpjaHJvbm86Om1pbGxpc2Vjb25kcz4oc3RvcCAtIHN0YXJ0KTsKICAgICAgICBzdGQ6OmNvdXQgPDwgIlRpbWU6ICIgPDwgZHVyYXRpb24uY291bnQoKSA8PCAiIG1zXG4iOwogICAgfQp9OwoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBidWJibGUodmVjdG9yPFQ+JiBhcnIpewoJVGltZXIgdDsKCWludCBuID0gYXJyLnNpemUoKTsKCWZvcihpbnQgaT0wOyBpPG4tMTsgaSsrKXsKICAgIAlmb3IoaW50IGo9MDsgajxuLWktMTsgaisrKXsKICAgICAgICAJaWYoYXJyW2pdPiBhcnJbaisxXSl7CiAgICAgICAgICAgIAlUIHRlbXAgPSBhcnJbal07CiAgICAgICAgICAgIAlhcnJbal0gPSBhcnJbaisxXTsKICAgICAgICAgICAgCWFycltqKzFdID0gdGVtcDsKICAgICAgICAJfQogICAgCX0KCX0KfQp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgp2b2lkIHByaW50KHZlY3RvcjxUPiYgYXJyKXsKCWZvcihpbnQgaT0wOyBpPCBhcnIuc2l6ZSgpOyBpKyspewoJCWNvdXQgPDwgYXJyW2ldIDw8ICIgIjsKCX0gCgljb3V0IDw8IGVuZGw7Cn0KaW50IG1haW4oKSB7CglpbnQgbjsKCWNpbj4+bjsKCXZlY3RvcjxpbnQ+IGFycihuKTsKCWZvcihpbnQgaT0wOyBpPG47IGkrKyl7CiAgICAJY2luID4+IGFycltpXTsKCX0KCWJ1YmJsZShhcnIpOwoJcHJpbnQoYXJyKTsKCXNyYW5kKHRpbWUoMCkpOwoJdmVjdG9yPGludD4gYXJyMSgxMDApOwoJZm9yKGludCBpPTA7IGk8MTAwOyBpKyspewogICAgCWFycjFbaV0gPSByYW5kKCkgJSAxMDA7Cgl9CglidWJibGUoYXJyMSk7CglidWJibGUoYXJyMSk7CglwcmludChhcnIxKTsKCXZlY3RvcjxpbnQ+IGFycjIoMzAwMDApOwoJZm9yKGludCBpPTA7IGk8MzAwMDA7IGkrKyl7CiAgICAJYXJyMltpXSA9IHJhbmQoKSAlIDEwMDA7Cgl9CglidWJibGUoYXJyMik7CglyZXR1cm4gMDsKfQo=