#include<iostream>
#include<iterator>
#include<algorithm>
using namespace std;
template<typename Iterator,typename Comparator>
void insertion_sort(const Iterator& begin,const Iterator& end){
Iterator key,insertion_point;
for(key=begin+1;key<end;key++){
insertion_point=key-1;
while(*key<*insertion_point && insertion_point>=begin){
insertion_point--;
}
rotate(insertion_point+1,key,key+1);
}
}
int main(int argc,char** args){
int a[11]={2,223,657,3,5,34,6,34,78,54,78};
insertion_sort<int*,greater<int> >(a,a+11);
copy(a,a+11,ostream_iterator<int>(cout," "));
}