Source code for Nevalainen, Raita & Thimbleby paper, 2002

See www.uclic.ucl.ac.uk/harold/warp for more details.
 

/** 
 * @author Harold Thimbleby, h.thimbleby@ucl.ac.uk
 * @version 1
 */

import java.lang.Comparable;

class InsertSort
{	final static int STABLE = 1, UNSTABLE = 2;

	public static void sort(Comparable a[], int sortType)
	{			int sentinel_position = 0;
		Comparable sentinel_value = a[sentinel_position];
		for( int i = 1; i < a.length; i++ )
			if( a[i].compareTo(sentinel_value) < 0 ) 
				sentinel_value = a[sentinel_position = i];
				
		if( sortType == UNSTABLE )
		{					// unstable sort
				a[sentinel_position] = a[0]; 
				a[0] = sentinel_value;
					}
		else
		{					// stable sort
				for( int i = sentinel_position; i > 0; i-- ) 
					a[i] = a[i-1];
				a[0] = sentinel_value;
					}
		
				for( int i = 2; i < a.length; i++ )
		{	int j = i;
			Comparable v = a[j];
			while( a[j-1].compareTo(v) > 0 ) 
			{	a[j] = a[j-1];
				j--;
			}
			a[j] = v;
		}
			}
} 

Simple test harness for InsertSort

import java.io.*;

class Test
{	public static void main(String args[])
	{	System.out.println("// <save file='output.html'><pre><!-- for whole file translation to XHTML-->");
		for( int type = 1; type <= 2; type++ )
		{	int v[] = { 2, 9, 3, 4, 1, 5, 8, 1, 4, 8, 7, 6 };
			Integer test[] = IntegerVector(v);
			System.out.println("// <save file='sortoutput.tex'>\n"
				+(type==InsertSort.UNSTABLE? "Unstable sort": "Stable sort")
				+"\n    Before sorting "+tostring(test));
			InsertSort.sort((Comparable[]) test, type);
			System.out.println("    After sorting  "+tostring(test)+"\n// </save>");
		}
		System.out.println("// </pre></save>");
	}
	
	static Integer[] IntegerVector(int [] t)
	{	Integer i[] = new Integer[t.length];
		for( int j = 0; j < t.length; j++ )
			i[j] = new Integer(t[j]);
		return i;
	}
	
	static String tostring(Integer a[])
	{	String s = "";
		for( int i = 0; i < a.length; s += a[i++])
			if( i > 0 ) s += ", ";
		return "["+s+"]";
	}
}