private static <T extends Comparable<? super T>>
    void insertionSort( T [ ] a, int left, int right )
    {
        for( int p = left + 1; p <= right; p++ )
        {
            T tmp = a[ p ];
            int j;

            for( j = p; j > left && tmp.compareTo( a[ j - 1 ] ) < 0; j-- )
                a[ j ] = a[ j - 1 ];
            a[ j ] = tmp;
        }
    }