#include<bits/stdc++.h>
using namespace std;
vector<int> x{10,3,5,6,20,45,1,9};
vector<string> w{"a","x","z","s","o","b","y"};
template < typename RandomAccessIterator ,typename compare>
void InsertSort(RandomAccessIterator first,RandomAccessIterator last,compare cmp){
for(auto i=first+1;i!=last;i++){
auto now=i;
auto value=*now;
auto next=i;
--next;
while(next>=first && cmp(value,*next) ){
*now=*next;
now=next;
--next;
}
*now=value;
}
};
template <typename T>
class MyCmp{
public:
bool operator()(const T& e1,const T &e2){
return e1<e2;
}
};
int main() {
if (fopen("/home/lianyi/123.txt", "r") != NULL) {
freopen("/home/lianyi/123.txt", "r", stdin);
} else {
std::ios::sync_with_stdio(false);
cin.tie(0);
}
MyCmp<int> cmp1;
InsertSort(x.begin(),x.end(),cmp1);
for(auto i:x){
cout<<i<<" ";
}cout<<endl;
MyCmp<string> cmp2;
InsertSort(w.begin(),w.end(),[](const string&e1,const string &e2){return e1<e2;});
for(auto i:w){
cout<<i<<" ";
}cout<<endl;
return 0;
}