class Bulles extends MacLib {
    static int J=100;


    public static void swap(int t[], int i, int j) {
        Rect r = new Rect();
        int p = t[i];
        t[i]=t[j];
        t[j]=p;
        setRect(r,i+4,J-t[j]+4,i+5,J-t[j]+5);
        invertRect(r);
        setRect(r,j+4,J-t[i]+4,j+5,J-t[i]+5);
        invertRect(r);
        setRect(r,i+4,J-t[i]+4,i+5,J-t[i]+5);
        invertRect(r);
        setRect(r,j+4,J-t[j]+4,j+5,J-t[j]+5);
        invertRect(r);
    }

    public static void affiche (int tab[], int j) {
        Rect r = new Rect();
        for (int i=0; i<j; i++) {
            setRect(r,i+4,J-tab[i]+4,i+5,J-tab[i]+5);
            paintRect(r);
        }
    }
    public static int ran(int i, int j) {
        return((int)(i+(j-i)*Math.random()));
    }
    public static void hasard (int tab[], int d) {
        boolean[] tr = new boolean[d];
        int m,k;
        for (int j=0; j<d; j++)
            tr[j]=true;
        for (int j=0; j<d; j++) {
            k=ran(0,d-j);
            m=0;
            while (!tr[m]) m++;
            for (int l=1; l<k; l++) {
                m++;
                while (!tr[m]) m++;
            }
            tab[j]=m;
            tr[m]=false;
        }
    }
    public static int select(int tab[], int g, int d) {
        int min, i, j;
        min=tab[g];
        i=g;
        for (j=g; j<d; j++) {
            if (tab[j]<min) {
                min=tab[j];
                i=j;
            }
        }
        return(i);
    }

  public static void main (String argv[]) {
      boolean fl;
      InitQuickDraw();
      Rect r = new Rect(100,100,J+120,J+120);
      setDrawingRect(r);
      showDrawing();
      setRect(r,4,4,J+5,J+5);
      frameRect(r);
      setRect(r,5,5,J+4,J+4);
      int tab[] = new int[J];
      int j;
      hasard(tab,J);
      affiche(tab,J);
      fl=true;
      while (fl) {
          fl = false;
          for (int i=0; i+1<J; i++) {
              if (tab[i]>tab[i+1]) {
                  swap(tab,i,i+1);
                  fl = true;
              }
          }
          try { Thread.sleep(90); }
          catch (Exception e) {}
      }
  }
}





