Advertisement
wbmerriman

Ch14 G1

Feb 20th, 2014
224
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Java 5 3.63 KB | None | 0 0
  1. //Gheorghe and Yeon-Soo
  2.  
  3. class Deck {
  4.     Card[] cards;
  5.     public Deck(int n) {
  6.         this.cards = new Card[n];
  7.     }
  8.     public Deck() {
  9.         this.cards = new Card [52];
  10.     int index = 0; 
  11.     for (int suit = 0; suit <= 3; suit++) {
  12.         for (int rank = 1; rank <= 13; rank++) {
  13.         this.cards[index] = new Card(suit, rank);
  14.         index++;
  15.         }
  16.     }
  17.     }
  18.     public static void printDeck(Deck deck) {
  19.     for (int i=0; i<deck.cards.length; i++) {
  20.         Card.printCard(deck.cards[i]);
  21.     }
  22.     }
  23.  
  24.     public static int findCard (Deck deck, Card card) {
  25.     for (int i = 0; i< deck.cards.length; i++) {
  26.         if (Card.sameCard(card, deck.cards[i])) {
  27.         return i;
  28.         }
  29.     }
  30.     return -1;
  31.     }
  32.  
  33.     public static int findBisect(Deck deck, Card card, int low, int high) {
  34.     if (high < low) return -1;
  35.     int mid = (high + low) / 2;
  36.     int comp = Card.compareCards(card, deck.cards[mid]);
  37.     if (comp == 0) {
  38.         return mid;
  39.     } else if (comp < 0) {
  40.         // card is less than deck.cards[mid]; search the first half
  41.         return findBisect(deck, card, low, mid-1);
  42.     } else {
  43.         return findBisect(deck, card, mid+1, high);
  44.     }
  45.     }
  46.  
  47.     public static int randomInt(int low, int high){
  48.     return (int)(low + (high - low) * Math.random());
  49.     }
  50.  
  51.     public static void swapCards(Deck deck, int i, int j){
  52.         Card card = new Card();
  53.         card = deck.cards[i];
  54.         deck.cards[i] = deck.cards[j];
  55.         deck.cards[j] = card;
  56.     }
  57.    
  58.     public static int indexLowestCard(Deck deck, int lowIndex, int highIndex){
  59.         int result = lowIndex;
  60.         for(int i = lowIndex; i < highIndex; i++){
  61.             if(Card.compareCards(deck.cards[result], deck.cards[i]) > 0) result = i;
  62.         }
  63.         return result;
  64.     }
  65.    
  66.     public static void shuffleDeck(Deck deck){
  67.         for(int i = 0; i < deck.cards.length; i++) {
  68.             swapCards(deck, i, randomInt(i, deck.cards.length - 1));
  69.         }
  70.     }
  71.  
  72.     /*
  73.      * Sorts a deck from low to high.
  74.      */
  75.     public static void sortDeck(Deck deck){
  76.         for(int i = 0; i < deck.cards.length; i++){
  77.             swapCards(deck, i, indexLowestCard(deck, i, deck.cards.length));
  78.         }
  79.     }
  80.  
  81.     public static Deck subdeck(Deck deck, int low, int high) {
  82.     Deck sub = new Deck(high-low+1);       
  83.     for (int i = 0; i<sub.cards.length; i++) {
  84.         sub.cards[i] = deck.cards[low+i];
  85.     }
  86.     return sub;
  87.     }
  88.  
  89.     public static Deck merge(Deck d1, Deck d2) {
  90.         Deck result = new Deck (d1.cards.length + d2.cards.length);
  91.         int flag;
  92.         for(int i = 0, j = 0, k = 0; k < result.cards.length; k++) {
  93.             flag = 1;
  94.             if (i == d1.cards.length)
  95.                 flag = 2;
  96.             else if (j == d2.cards.length)
  97.                 flag = 1;
  98.             else if (Card.compareCards(d1.cards[i], d2.cards[j]) > 0)
  99.                 flag = 2;
  100.                        
  101.             if (flag == 1) {
  102.                 result.cards[k] = d1.cards[i];  i++;
  103.             } else {
  104.                 result.cards[k] = d2.cards[j];  j++;
  105.             }                  
  106.         }
  107.         return result;
  108.     }
  109.  
  110.     public static Deck mergeSort(Deck deck) {
  111.         Deck a = Deck.subdeck(deck, 0, deck.cards.length/2);
  112.         Deck b = Deck.subdeck(deck, deck.cards.length/2, deck.cards.length - 1);
  113.         sortDeck(a);
  114.         sortDeck(b);
  115.        
  116.         deck = merge(a, b);
  117.         return deck;
  118.     }
  119.     public static Deck recMergeSort(Deck deck){
  120.         if(deck.cards.length <= 1) return deck;
  121.  
  122.         Deck a = subdeck(deck, 0, (deck.cards.length-1) / 2);
  123.         Deck b = subdeck(deck, (deck.cards.length-1) / 2 + 1, deck.cards.length - 1);
  124.         a = mergeSort(a);
  125.         b = mergeSort(b);
  126.         return merge(a, b);
  127.     }
  128. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement