import java.util.Scanner;

public class Bench
{
   public static void main ( String[] args )
   {
      Scanner console = new Scanner(System.in);
      int size, maxSize;
      java.util.Random gen = new java.util.Random();
      final int nPasses = 100000;

      System.out.print("Initial size:  ");
      if ( args.length < 1 )
         size = console.nextInt();
      else
      {
         size = Integer.parseInt(args[0]);
	 System.out.println(size);
      }
      System.out.print("  Final size:  ");
      if ( args.length < 2 )
         maxSize = console.nextInt();
      else
      {
         maxSize = Integer.parseInt(args[1]);
         System.out.println(maxSize);
      }
      while ( size <= maxSize )
      {
         long t1, t2, t3, t4;
	 Integer[] v1;

	 v1 = new Integer[size];

         t1 = System.nanoTime();
	 if ( size <= 10 )
            for ( int k = 0; k < nPasses; k++ )
	    {  for ( int j = 0; j < size; j++ )
                  v1[j] = gen.nextInt(100);
               PermSort.permSort(v1);
	    }
	 t2 = System.nanoTime();
         for ( int k = 0; k < nPasses; k++ )
	 {  for ( int j = 0; j < size; j++ )
               v1[j] = gen.nextInt(100);
            BackSort.backSort(v1);
	 }
	 t3 = System.nanoTime();
         for ( int k = 0; k < nPasses; k++ )
	 {  for ( int j = 0; j < size; j++ )
               v1[j] = gen.nextInt(100);
            BoundSort.boundSort(v1);
	 }
	 t4 = System.nanoTime();
	 if ( size <= 10 )
            System.out.printf("%d,%3.3f,%3.3f,%3.3f\n", size,
               1E-6/nPasses*(t2-t1), 1E-6/nPasses*(t3-t2),
	       1E-6/nPasses*(t4-t3) );
	 else
            System.out.printf("%d,,%3.3f,%3.3f\n", size,
               1E-6/nPasses*(t3-t2), 1E-6/nPasses*(t4-t3) );
	 size++;
      }
   }
}
