public class QuickAnimate
{
    public static void sort(double[] a)
    {
        sort(a, 0, a.length - 1);
    }

    private static void sort(double[] a, int left, int right)
    { 
        if (right <= left) return;
        int i = partition(a, left, right);
        sort(a, left, i-1);
        sort(a, i+1, right);
    }

    private static int partition(double[] a, int left, int right)
    {
        int i = left - 1;
        int j = right;
        while(true)
        { 
            while (Animate.less(a, ++i, right))
                if (i == right) break;
            while (Animate.less(a, right, --j))
                if (j == left) break;
            if (i >= j) break;
            Animate.exch(a, i, j);
        }
        Animate.exch(a, i, right);
        return i;
    }

   public static void main(String args[]) 
   {
      int N = Integer.parseInt(args[0]);
      int M = Integer.parseInt(args[1]);
      double[] a = new double[N];
      for (int i = 0; i < N; i++)
         a[i] = (double) StdRandom.uniform(M)/M;
      Animate.initialize(a);
      sort(a);
   }
}

