题目是要对扑克牌排序,每次只能看两张牌,insertion sort 就是每次比较两个。
首先实现一个Poker类:有数字和花色。
public class Poker implements Comparable<Poker>{
int number;
String suit;//花色
public Poker(int number,String suit){
this.number=number;
this.suit=suit;
}
public int getSuit(){
if (this.suit.equals("spades")) return 1;
if (this.suit.equals("hearts")) return 2;
if (this.suit.equals("clubs")) return 3;
if (this.suit.equals("diamonds")) return 4;
return -1; //error
}
public int compareTo(Poker that){
if (this.number<that.number)return -1;
if (this.number>that.number)return +1;
if (this.getSuit()<that.getSuit())return -1;
if (this.getSuit()>that.getSuit())return +1;
return 0;//equal
}
public String toString(){
return this.number+" "+this.suit;
}
}
用insertion sort进行排序:
import edu.princeton.cs.algs4.StdRandom;
public class E2_1_13 {
public static void main(String[]args){
Poker[] a=new Poker[52];//52张扑克
for (int i=1,j=0;i<=13;i++){//1,2,3....13代表A,2,...K
Poker temp=new Poker(i,"spades");a[j++]=temp;
temp=new Poker(i,"hearts");a[j++]=temp;
temp=new Poker(i,"clubs");a[j++]=temp;
temp=new Poker(i,"diamonds");a[j++]=temp;
}
StdRandom.shuffle(a);//打乱
Insertion.sort(a);
assert Insertion.isSorted(a);
Insertion.show(a);
}
}
结果: