#include <iostream>
#include <vector>
using namespace std;
template<typename T>
void Firstalg(T &x, int &a, int &b, int n){
a=0;
b=0;
for(int i=0;i<n;i++){
for(int j=0; j<n-i-1; j++){
a+=1;
if(x[j]>x[j+1]){
swap(x[j],x[j+1]);
b+=1;
}
}
}
}
template<typename T>
void Secondalg(T &x, int &a, int &b, int n){
a=0;
b=0;
for(int i=1; i<n; i++){
int key = x[i];
int j=i-1;
while(j>=0){
a+=1;
if(x[j]>key){
x[j+1]=x[j];
b+=1;
j--;
}else{break;}
}
x[j+1]=key;
}
}
int main() {
int n, sort, comp;
cin>>n;
int *x = new int[n];
for (int i=0; i<n; i++){
cin>>x[i];
};
for (int i=0; i<n; i++){
cout<<x[i]<<" ";
};
cout<<endl;
//Для векторів
vector<int> myVector ={8, 9 ,4 ,0};
Firstalg(myVector,sort,comp,4);
for(int i: myVector)cout<<i<<" ";
cout<<"\nКількість порівнянь "<<sort<<endl<<"Кількість перестановок "<<comp;
Secondalg(myVector,sort,comp,4);
for(int i: myVector)cout<<i<<" ";
cout<<"\nКількість порівнянь "<<sort<<endl<<"Кількість перестановок "<<comp;
/* Secondalg(x,sort,comp,n);
for (int i=0; i<n; i++){
cout<<x[i]<<" ";
};
cout<<endl;
cout<<"Кількість порівнянь "<<sort<<endl<<"Кількість перестановок "<<comp;
Firstalg(x,sort,comp,n);
for (int i=0; i<n; i++){
cout<<x[i]<<" ";
};
cout<<endl;
cout<<"Кількість порівнянь "<<sort<<endl<<"Кількість перестановок "<<comp;
//First Algoritm
int a=0;
int b=0;
for(int i=0;i<n;i++){
for(int j=0; j<n-i-1; j++){
a+=1;
if(x[j]>x[j+1]){
swap(x[j],x[j+1]);
b+=1;
}
}
}
for (int i=0; i<n; i++){
cout<<x[i]<<" ";
};
cout<<endl;
cout<<"Кількість порівнянь "<<a<<endl<<"Кількість перестановок "<<b;
//Second
int a=0;
int b=0;
for(int i=1; i<n; i++){
int key = x[i];
int j=i-1;
while(j>=0){
a+=1;
if(x[j]>key){
x[j+1]=x[j];
b+=1;
j--;
}else{break;}
}
x[j+1]=key;
}
for (int i=0; i<n; i++){
cout<<x[i]<<" ";
};
cout<<endl;
cout<<"Кількість порівнянь "<<a<<endl<<"Кількість перестановок "<<b;*/
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgp1c2luZyBuYW1lc3BhY2Ugc3RkOwp0ZW1wbGF0ZTx0eXBlbmFtZSBUPgoKdm9pZCBGaXJzdGFsZyhUICZ4LCBpbnQgJmEsIGludCAmYiwgaW50IG4pewoJYT0wOwoJYj0wOwoJZm9yKGludCBpPTA7aTxuO2krKyl7CgkJZm9yKGludCBqPTA7IGo8bi1pLTE7IGorKyl7CgkJCWErPTE7CgkJCWlmKHhbal0+eFtqKzFdKXsKCQkJCXN3YXAoeFtqXSx4W2orMV0pOwoJCQkJYis9MTsKCQkJfQoJCX0KCX0KfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBTZWNvbmRhbGcoVCAmeCwgaW50ICZhLCBpbnQgJmIsIGludCBuKXsKCWE9MDsKCWI9MDsKCWZvcihpbnQgaT0xOyBpPG47IGkrKyl7CgkJaW50IGtleSA9IHhbaV07CgkJaW50IGo9aS0xOwoJCXdoaWxlKGo+PTApewoJCQlhKz0xOwoJCQlpZih4W2pdPmtleSl7CgkJCXhbaisxXT14W2pdOwoJCQliKz0xOwoJCQlqLS07CgkJCX1lbHNle2JyZWFrO30KCQl9CgkJeFtqKzFdPWtleTsKCX0KfQoKaW50IG1haW4oKSB7CglpbnQgbiwgc29ydCwgY29tcDsKCWNpbj4+bjsKCWludCAqeCA9IG5ldyBpbnRbbl07Cglmb3IgKGludCBpPTA7IGk8bjsgaSsrKXsKCQljaW4+PnhbaV07Cgl9OwoJCglmb3IgKGludCBpPTA7IGk8bjsgaSsrKXsKCQljb3V0PDx4W2ldPDwiICI7Cgl9OwoJY291dDw8ZW5kbDsKCS8v0JTQu9GPINCy0LXQutGC0L7RgNGW0LIKCXZlY3RvcjxpbnQ+IG15VmVjdG9yID17OCwgOSAsNCAsMH07CglGaXJzdGFsZyhteVZlY3Rvcixzb3J0LGNvbXAsNCk7Cglmb3IoaW50IGk6IG15VmVjdG9yKWNvdXQ8PGk8PCIgIjsKCWNvdXQ8PCJcbtCa0ZbQu9GM0LrRltGB0YLRjCDQv9C+0YDRltCy0L3Rj9C90YwgIjw8c29ydDw8ZW5kbDw8ItCa0ZbQu9GM0LrRltGB0YLRjCDQv9C10YDQtdGB0YLQsNC90L7QstC+0LogIjw8Y29tcDsKCVNlY29uZGFsZyhteVZlY3Rvcixzb3J0LGNvbXAsNCk7Cglmb3IoaW50IGk6IG15VmVjdG9yKWNvdXQ8PGk8PCIgIjsKCWNvdXQ8PCJcbtCa0ZbQu9GM0LrRltGB0YLRjCDQv9C+0YDRltCy0L3Rj9C90YwgIjw8c29ydDw8ZW5kbDw8ItCa0ZbQu9GM0LrRltGB0YLRjCDQv9C10YDQtdGB0YLQsNC90L7QstC+0LogIjw8Y29tcDsKCQoJCi8qCVNlY29uZGFsZyh4LHNvcnQsY29tcCxuKTsKCWZvciAoaW50IGk9MDsgaTxuOyBpKyspewoJCWNvdXQ8PHhbaV08PCIgIjsKCX07Cgljb3V0PDxlbmRsOwoJY291dDw8ItCa0ZbQu9GM0LrRltGB0YLRjCDQv9C+0YDRltCy0L3Rj9C90YwgIjw8c29ydDw8ZW5kbDw8ItCa0ZbQu9GM0LrRltGB0YLRjCDQv9C10YDQtdGB0YLQsNC90L7QstC+0LogIjw8Y29tcDsKCQoJRmlyc3RhbGcoeCxzb3J0LGNvbXAsbik7Cglmb3IgKGludCBpPTA7IGk8bjsgaSsrKXsKCQljb3V0PDx4W2ldPDwiICI7Cgl9OwoJY291dDw8ZW5kbDsKCWNvdXQ8PCLQmtGW0LvRjNC60ZbRgdGC0Ywg0L/QvtGA0ZbQstC90Y/QvdGMICI8PHNvcnQ8PGVuZGw8PCLQmtGW0LvRjNC60ZbRgdGC0Ywg0L/QtdGA0LXRgdGC0LDQvdC+0LLQvtC6ICI8PGNvbXA7CgkKCS8vRmlyc3QgQWxnb3JpdG0KCWludCBhPTA7CglpbnQgYj0wOwoJZm9yKGludCBpPTA7aTxuO2krKyl7CgkJZm9yKGludCBqPTA7IGo8bi1pLTE7IGorKyl7CgkJCWErPTE7CgkJCWlmKHhbal0+eFtqKzFdKXsKCQkJCXN3YXAoeFtqXSx4W2orMV0pOwoJCQkJYis9MTsKCQkJfQoJCX0KCX0KCQoJZm9yIChpbnQgaT0wOyBpPG47IGkrKyl7CgkJY291dDw8eFtpXTw8IiAiOwoJfTsKCWNvdXQ8PGVuZGw7Cgljb3V0PDwi0JrRltC70YzQutGW0YHRgtGMINC/0L7RgNGW0LLQvdGP0L3RjCAiPDxhPDxlbmRsPDwi0JrRltC70YzQutGW0YHRgtGMINC/0LXRgNC10YHRgtCw0L3QvtCy0L7QuiAiPDxiOwoJCgkvL1NlY29uZAoJaW50IGE9MDsKCWludCBiPTA7Cglmb3IoaW50IGk9MTsgaTxuOyBpKyspewoJCWludCBrZXkgPSB4W2ldOwoJCWludCBqPWktMTsKCQl3aGlsZShqPj0wKXsKCQkJYSs9MTsKCQkJaWYoeFtqXT5rZXkpewoJCQl4W2orMV09eFtqXTsKCQkJYis9MTsKCQkJai0tOwoJCQl9ZWxzZXticmVhazt9CgkJfQoJCXhbaisxXT1rZXk7Cgl9CgkKCWZvciAoaW50IGk9MDsgaTxuOyBpKyspewoJCWNvdXQ8PHhbaV08PCIgIjsKCX07Cgljb3V0PDxlbmRsOwoJY291dDw8ItCa0ZbQu9GM0LrRltGB0YLRjCDQv9C+0YDRltCy0L3Rj9C90YwgIjw8YTw8ZW5kbDw8ItCa0ZbQu9GM0LrRltGB0YLRjCDQv9C10YDQtdGB0YLQsNC90L7QstC+0LogIjw8YjsqLwoKfQ==