public class Animate
{
   public final static double SIZE = .01;
   public static boolean less(double[] a, int i, int j)
   {
       int N = a.length;
       StdDraw.setPenColor(StdDraw.BLACK);
       StdDraw.filledSquare(i, a[i]*N, SIZE*N);
       return (a[i] < a[j]);
   }
   public static void exch(double[] a, int i, int j)
   {
       int N = a.length;
       StdDraw.setPenColor(StdDraw.WHITE);
       StdDraw.filledSquare(i, a[i]*N, SIZE*N);
       StdDraw.filledSquare(j, a[j]*N, SIZE*N);
       double swap = a[i];
       a[i] = a[j];
       a[j] = swap;
       StdDraw.setPenColor(StdDraw.BLACK);
       StdDraw.filledSquare(i, a[i]*N, SIZE*N);
       StdDraw.filledSquare(j, a[j]*N, SIZE*N);
   }
   public static boolean isSorted(double[] a)
   {
      for (int i = 1; i < a.length; i++)
         if (less(a, i, i-1)) return false;
     return true;
   }
   public static void initialize(double[] a) 
   {
      int N = a.length;
      StdDraw.setXscale(-1, N);
      StdDraw.setYscale(-1, N);
      StdDraw.setPenColor(StdDraw.LIGHT_GRAY);
      StdDraw.filledSquare(N/2 - .5, N/2 , N/2 + 1);
      StdDraw.setPenColor(StdDraw.BLACK);
      for (int i = 0; i < N; i++)
      {
         StdDraw.filledSquare(i, a[i]*N, SIZE*N);
      }
   }
}

