#include <iostream>
#include <algorithm>
#include <functional>

void print( const int a[], std::size_t n, std::size_t position_of_active_item )
{
   std::cout << "{ " ;
   for( std::size_t i = 0 ; i < n ; ++i )
       if( i == position_of_active_item ) std::cout << '[' << a[i] << "] " ;
       else std::cout << a[i] << ' ' ;
   std::cout << "}\n" ;
}


int main()
{
    int a[] = { -5, 16, 8, 9, -12, 0, -3 } ;
    constexpr std::size_t N = sizeof(a) / sizeof(*a) ;
    std::size_t position_of_active_item = 2 ;
    print( a, N, position_of_active_item ) ;

    // swap active item with the first element
    std::swap( a[0], a[position_of_active_item] ) ;
    position_of_active_item = 0 ;

    // sort from the second item onwards
    std::sort( a+1, a+N ) ;
    print( a, N, position_of_active_item ) ;

    // bring the active item into place
    std::size_t i = 1 ;
    for( ; a[i] < a[i-1] && i < N ; ++i ) std::swap( a[i], a[i-1] ) ;
    position_of_active_item = i-1 ;
    print( a, N, position_of_active_item ) ;
}
