package sorts;
import java.util.Comparator;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
/**
* InsertionSort.java
* Created by Stijn Strickx on May 21, 2008
* Copyright 2008 Stijn Strickx, All rights reserved
*/
/**
* Insertion sort algorithm
* Time Complexity: O(n*n)
* Memory Complexity: O(1)
* Stable: yes
*/
public class InsertionSort extends Sorter{
private static Log log = LogFactory.getFactory().getInstance(
InsertionSort.class);
@Override
public <T extends Comparable<? super T>> void sort(T[] a) {
for(int i = 1; i < a.length; i++){
int j = i;
T o = a[i];
while((j > 0) && o.compareTo(a[j-1]) < 0){
a[j] = a[j-1];
j--;
}
a[j] = o;
}
}
public <T> void sort(T[] a, Comparator<T> c) {
for(int i = 1; i < a.length; i++){
int j = i;
T o = a[i];
while((j > 0) && c.compare(o, a[j-1]) < 0){
if (log.isDebugEnabled())
log.debug("swapping (" + String.valueOf(j) + ") " + a[j].toString()
+ " for (" + String.valueOf(j-1) + ") " + a[j-1].toString());
a[j] = a[j-1];
j--;
}
a[j] = o;
}
}
}