import java.util.Arrays; /* Select the smallest element and put it in its final position. Takes O(n^2) steps always. */ public final class Selection { // Sort data[0]..data[n-1] into ascending order. public static void select (final int[] data) { final int n = data.length; for (int i=0; i<n-1; i++) { // At this point data[0 .. i-1] is sorted and // contains the smallest elements in the data set. // Now search for the index of next smallest element. int small = i; for (int j=i+1; j<n; j++) { if (data[j] < data[small]) small=j; } swap (data, i, small); if (verbose) System.out.printf ("%2d: %s%n", i, Arrays.toString(data)); } } private static void swap (int[] data, int i, int j) { final int temp = data[i]; data[i]=data[j]; data[j]=temp; } 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)); select (data); System.out.printf ("**: %s%n", Arrays.toString(data)); } }