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));
   }
}