01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package algs21;
import stdlib.*;
import algs12.XCard;
import java.util.Comparator;

public class XSortCards2 {
  public static void show (String title, XCard[] d) {
    StdOut.println (title);
    for (int i=0; i<4; i++) {
      for (int j=0; j<13; j++) {
        StdOut.format ("%3s ", d[i*13+j]);
      }
      StdOut.println ();
    }
    StdOut.println ();
  }
  private static class RankFirstComparator implements Comparator<XCard> {
    public int compare (XCard c1, XCard c2) {
      if (c1.rank.compareTo (c2.rank) < 0) return -1;
      if (c1.rank.compareTo (c2.rank) > 0) return +1;
      if (c1.suit.compareTo (c2.suit) < 0) return -1;
      if (c1.suit.compareTo (c2.suit) > 0) return +1;
      return 0;
    }
  }
  public static void main (String[] args) {
    XCard[] d = XCard.newDeck ();
    show ("Initial", d);
    StdRandom.shuffle (d);
    show ("Shuffled", d);
    Insertion.sort (d);
    show ("Sort1", d);
    Insertion.sort (d, new RankFirstComparator ());
    show ("Sort2", d);
  }
}