Algs4-2.1.13纸牌排序-按花色排序
时间: 2023-07-01 22:14:19 浏览: 123
Algs4-2.1.13纸牌排序中按花色排序的思路如下:
1. 将纸牌按照花色分为四个组,分别是梅花、方块、红心、黑桃。
2. 对每个组内的牌进行排序,可以使用插入排序或者归并排序等算法进行排序。
3. 将四个组内的牌依次合并,即可得到按照花色排序的纸牌。
代码实现如下(以插入排序为例):
```java
public static void sortBySuit(Card[] cards) {
int n = cards.length;
Card[] aux = new Card[n];
// 按照花色排序
for (int i = 0; i < 4; i++) {
int j = 0;
for (int k = 0; k < n; k++) {
if (cards[k].suit() == i) {
aux[j++] = cards[k];
}
}
// 对每个组内的牌进行排序
for (int m = 1; m < j; m++) {
for (int p = m; p > 0 && aux[p].compareTo(aux[p-1]) < 0; p--) {
exch(aux, p, p-1);
}
}
// 将四个组内的牌依次合并
for (int q = 0; q < j; q++) {
cards[i*n/4+q] = aux[q];
}
}
}
```
其中,Card为纸牌类,suit()方法返回纸牌花色,compareTo()方法比较两张纸牌的大小,exch()方法交换两张纸牌的位置。
阅读全文