public final class TimedSelection {

   private static void swap (int [] data, int i, int j) {
      final int temp = data[i];
      data[i]=data[j];
      data[j]=temp;
   }

   public static void select (int [] data, int n) {
      select (data, 0, n);
   }
      
   public static void select (int [] data, int first, int n) {
      for (int i=n-1; i>0; i--) {
	 int big = first;
	 for (int j=first+1; j<=first+i; j++) {
	    if (data[big] < data[j]) big=j;
	 }
	 swap (data, first+i, big);
	 System.out.print (i+": ");
	 printArray (data, first, n);
      }
   }


   private static void printArray (int [] data, int n) {
      printArray (data, 0, n);
   }

   private static void printArray (int [] data, int first, int n) {
      System.out.print ("[");
      for (int i=first; i<first+n; i++) {
	 System.out.print (data[i]);
	 if (i<first+n-1) System.out.print (", ");
      }
      System.out.println ("]");
   }

   public static void main (String [] args) {
      int[] data  = new int [1000];
      int n = 0;
      for (int i=0; i < args.length; i++) {
         try {
	    data[n++] = Integer.parseInt(args[i]);
         } catch (final NumberFormatException ex) {
            ex.printStackTrace(System.err);
         }
      }
      printArray(data, n);

      final long start = System.currentTimeMillis();
      select(data, n);
      System.out.printf("time: %d%n", System.currentTimeMillis() - start);

      printArray(data, n);
   }

}