public class ShellSort {
	java.util.ArrayList<Integer> tmp;
	
	ShellSort(int[] array)
	{
		tmp = new java.util.ArrayList<Integer>();
		for (int i: array)
			tmp.add(i);
	}
	
	private int[] array(java.util.List<Integer> from)
	{
		int[] erg = new int[from.size()];
		
		for (int i = 0; i < from.size(); i++)
		{
			erg[i] = from.get(i);
		}
		
		return erg;
	}
	
	int[] shellSort()
	{
		return array(sort(tmp));
	}
	
	private java.util.ArrayList<Integer> sort(java.util.List<Integer> range)
	{
		java.util.ArrayList<Integer> erg = new java.util.ArrayList<Integer>();
		
		int s = range.size();
		
		if (s < 2) 
			return new java.util.ArrayList<Integer>(range);
		
		int next = 0, next2 = 0;
		
		for (int i = 0; i < 3; i++)
		{
			next  = next2;
			next2 = (next+s/3 < s)? (int)Math.ceil(next+s/3.) : s;
			
			erg.addAll(sort(range.subList(next, next2)));
		}
		
		InsertSort sorter = new InsertSort(array(erg));
		
		return sorter.insertSortAList();
	}	
}

Add a code snippet to your website: www.paste.org