public final class Selection2 {

   // sort data[0]..data[n-1] into ascending order
   public static void select (int [] data, int n) {
      select (data, 0, n);
   }

   // sort data[first]..data[first+n-1] into ascending order
   public static void select (int [] data, int first, int n) {
      for (int i=n-1; i>first; i--) {

	 // find index of next biggest element
	 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 swap (int [] data, int i, int j) {
      final int temp = data[i];
      data[i]=data[j];
      data[j]=temp;
   }

   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 (NumberFormatException e) {
         }
      }
      printArray (data, n);
      select (data, n);
      printArray (data, n);
   }
}