#include <iostream>
#include <vector>
template < typename T>
void selectionSort( std:: vector < T> & array)
{
typedef typename std:: vector < T> :: iterator Itr;
Itr itr_begin = array.begin ( ) ;
while ( itr_begin ! = array.end ( ) )
{
Itr itr_min = itr_begin;
for ( Itr i = itr_begin + 1 ; i ! = array.end ( ) ; i++ )
{
if ( * i < * itr_min)
{
itr_min = i;
}
}
std:: iter_swap ( itr_begin, itr_min) ;
itr_begin++ ;
}
}
template < typename T>
void print( const std:: vector < T> & array)
{
for ( auto itr = array.begin ( ) ; itr ! = array.end ( ) ; itr++ )
{
std:: cout << * itr << " " ;
}
std:: cout << '\n ' ;
}
int main( )
{
std:: vector < int > v( { 5 , 3 , 12 , 2 , 8 } ) ;
std:: cout << "Original Array :" ;
print( v) ;
selectionSort( v) ;
std:: cout << "Sorted Array :" ;
print( v) ;
std:: cout << '\n ' ;
std:: vector < char > c( { 't' , 'q' , 'a' , 'r' , 'p' } ) ;
std:: cout << "Original Array :" ;
print( c) ;
selectionSort( c) ;
std:: cout << "Sorted Array :" ;
print( c) ;
std:: cout << '\n ' ;
std:: vector < std:: string > str( { "code" , "live" , "love" , "sing" , "create" } ) ;
std:: cout << "Original Array :" ;
print( str) ;
selectionSort( str) ;
std:: cout << "Sorted Array :" ;
print( str) ;
std:: cout << '\n ' ;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgojaW5jbHVkZSA8dmVjdG9yPgoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBzZWxlY3Rpb25Tb3J0KHN0ZDo6dmVjdG9yPFQ+JiBhcnJheSkKewogIHR5cGVkZWYgdHlwZW5hbWUgc3RkOjp2ZWN0b3I8VD46Oml0ZXJhdG9yIEl0cjsKICBJdHIgaXRyX2JlZ2luID0gYXJyYXkuYmVnaW4oKTsKICB3aGlsZShpdHJfYmVnaW4gIT0gYXJyYXkuZW5kKCkpCiAgewogICAgSXRyIGl0cl9taW4gPSBpdHJfYmVnaW47CiAgICBmb3IoSXRyIGkgPSBpdHJfYmVnaW4gKyAxOyBpICE9IGFycmF5LmVuZCgpOyBpKyspCiAgICB7CiAgICAgIGlmKCppIDwgKml0cl9taW4pCiAgICAgIHsKICAgICAgICBpdHJfbWluID0gaTsKICAgICAgfQogICAgfQogICAgc3RkOjppdGVyX3N3YXAoaXRyX2JlZ2luLCBpdHJfbWluKTsKICAgIGl0cl9iZWdpbisrOwogIH0KfQoKdGVtcGxhdGU8dHlwZW5hbWUgVD4Kdm9pZCBwcmludChjb25zdCBzdGQ6OnZlY3RvcjxUPiYgYXJyYXkpCnsKICBmb3IoYXV0byBpdHIgPSBhcnJheS5iZWdpbigpOyBpdHIgIT0gYXJyYXkuZW5kKCk7IGl0cisrKQogIHsKICAgIHN0ZDo6Y291dCA8PCAqaXRyIDw8ICIgIjsKICB9CiAgc3RkOjpjb3V0IDw8ICdcbic7Cn0KCmludCBtYWluKCkKewogIHN0ZDo6dmVjdG9yPGludD4gdih7NSwgMywgMTIsIDIsIDh9KTsKICBzdGQ6OmNvdXQgPDwgIk9yaWdpbmFsIEFycmF5IDoiOwogIHByaW50KHYpOwogIHNlbGVjdGlvblNvcnQodik7CiAgc3RkOjpjb3V0IDw8IlNvcnRlZCBBcnJheSA6IjsKICBwcmludCh2KTsKICBzdGQ6OmNvdXQgPDwgJ1xuJzsKCiAgc3RkOjp2ZWN0b3I8Y2hhcj4gYyh7J3QnLCAncScsICdhJywgJ3InLCAncCd9KTsKICBzdGQ6OmNvdXQgPDwgIk9yaWdpbmFsIEFycmF5IDoiOwogIHByaW50KGMpOwogIHNlbGVjdGlvblNvcnQoYyk7CiAgc3RkOjpjb3V0IDw8IlNvcnRlZCBBcnJheSA6IjsKICBwcmludChjKTsKICBzdGQ6OmNvdXQgPDwgJ1xuJzsKCiAgc3RkOjp2ZWN0b3I8c3RkOjpzdHJpbmc+IHN0cih7ImNvZGUiLCAibGl2ZSIsICJsb3ZlIiwgInNpbmciLCAiY3JlYXRlIn0pOwogIHN0ZDo6Y291dCA8PCAiT3JpZ2luYWwgQXJyYXkgOiI7CiAgcHJpbnQoc3RyKTsKICBzZWxlY3Rpb25Tb3J0KHN0cik7CiAgc3RkOjpjb3V0IDw8IlNvcnRlZCBBcnJheSA6IjsKICBwcmludChzdHIpOwogIHN0ZDo6Y291dCA8PCAnXG4nOwoKfQoK