import java.util.Comparator; public class InsertionSort implements Sort { private Comparator comp = null; public InsertionSort() {} public InsertionSort( Comparator c ) { comp = c; } public void sort( Object [] d ) { sort( d, 0, d.length - 1 ); } public void sort( Object [] d, int start, int end ) { Object key; int i, j; // j indexa el elemento que se va a insertar // i indexa las posibles posiciones en las que se podrķa insertar el elemento j for ( j = start + 1; j <= end; j++ ) { key = d[ j ]; for ( i = j - 1; i >= 0 && compare( key, d[ i ] ) < 0; i-- ) d[ i + 1 ] = d[ i ]; d[ i + 1] = key; } } private int compare( Object a, Object b ) { if ( comp == null ) { return ((Comparable)a).compareTo( b ); } else { return comp.compare( a, b ); } } }