import java.util.Arrays; /* Insert the next unsorted element into its correct position in the sorted portion by moving back all the values greter than it. Takes O(n^2) steps in the worse case, but could take fewer steps. */ public final class Insertion { // sort data[0]..data[n-1] into ascending order public static void insertSort (int [] data) { final int n = data.length; for (int i=1; i<n; i++) { // At this point data[0 .. i-1] is sorted. // Now insert data[i] into its proper place in data[0..i] final int t = data[i]; int j; // The proper place for data[i] is an index j such that // data[0..j-1] <= t < data[j..i-1] // Find j and move elements data[j..i-1] to data[j+1..i]. for (j = i; j>0 && t<data[j-1]; j--) { data[j] = data[j-1]; } data [j] = t; if (verbose) System.out.printf ("%2d: %s%n", i, Arrays.toString(data)); } } private static boolean verbose = System.getProperty ("verbose")!=null; public static void main (String [] args) throws NumberFormatException { final int [] data = new int [args.length]; for (int i=0; i<data.length; i++) { data[i] = Integer.parseInt (args[i]); } System.out.printf ("..: %s%n", Arrays.toString(data)); insertSort (data); System.out.printf ("**: %s%n", Arrays.toString(data)); } }