用Java實現撲克牌排序
思路:給花色賦權重0 13 26 39,排序時某個卡牌的絕對值等於花色+數字,依據這個排序,一次掃描OK。
程式碼:
public class PokerSorter {
// inner class
static class Card {
public int color;
public int number;
@Override
public String toString(){
String colorString = "";
String numberString = "";
switch(color){
case 0 : colorString = "♠"; break;
case 13 : colorString = "♥"; break;
case 26 : colorString = "♣"; break;
case 39 : colorString = "♦"; break;
}
switch(number){
case 11 : numberString = "J"; break;
case 12 : numberString = "Q"; break;
case 13 : numberString = "K"; break;
case 14 : numberString = "A"; break;
default : numberString = String.valueOf(number);break;
}
return colorString + numberString;
}
}
public static void main(String[] args) {
// cards init
List<Card> cards = new ArrayList<Card>(52);
for (int i = 0; i < 52; i++) {
Card card = new Card();
card.number = i % 13 + 2;
card.color = i / 13 * 13;
cards.add(card);
}
// cards shuffle
Collections.shuffle(cards);
// print before sort
System.out.println("排序前:");
Iterator<Card> cardsIter = cards.iterator();
while(cardsIter.hasNext()){
System.out.print(cardsIter.next());
}
// cards sort
/*
Collections.sort(cards,new Comparator<Card>(){
@Override
public int compare(Card card1, Card card2) {
int weight1 = card1.color + card1.number;
int weight2 = card2.color + card2.number;
return weight1 - weight2;
}
});
*/
//自己寫快排
quickSort(cards, 0, cards.size()-1);
// print after sort
System.out.println("");
System.out.println("排序後:");
cardsIter = cards.iterator();
while(cardsIter.hasNext()){
System.out.print(cardsIter.next());
}
}
}
輸出:
後續:2gua提示不能用語言庫, 將Collection.sort改為自定義quickSort方法,輸出不變。
// partition
public static int partition(List<Card> list, int low, int high) {
// 先以第一個記錄為軸
int tmpColor = list.get(low).color;
int tmpNumber = list.get(low).number;
// 軸的權重
int weight = list.get(low).color + list.get(low).number;
while (low < high) {
while (low < high && list.get(high).color + list.get(high).number > weight) {
high--;
}
// 比軸小的移到低端
list.get(low).color = list.get(high).color;
list.get(low).number = list.get(high).number;
while (low < high && list.get(low).color + list.get(low).number < weight) {
low++;
}
// 比軸大的移到高階
list.get(high).color = list.get(low).color;
list.get(high).number = list.get(low).number;
}
// 軸記錄到位
list.get(low).color = tmpColor;
list.get(low).number = tmpNumber;
// 返回軸位置
return low;
}
// quick sort
public static void quickSort(List<Card> list, int low, int high) {
if (low < high) {
int middle = partition(list, low, high);
quickSort(list, low, middle - 1);
quickSort(list, middle + 1, high);
}
}
相關文章
- Java 簡單實現撲克牌抽象類Java抽象
- java程式:簡易撲克牌遊戲Java遊戲
- 【YOLOv5】實現撲克牌的點數識別YOLO
- python實現撲克遊戲 - 抽鬼牌 和 21點Python遊戲
- 簡易撲克牌遊戲簡單實現,歡迎指正遊戲
- Java第三季—簡易撲克牌遊戲Java遊戲
- Java第三季撲克牌作業 參考了幕友的排序方法 非常感謝Java排序
- 撲克牌速算24 -窮舉(JavaScript)JavaScript
- JZ-045-撲克牌順子
- 劍指Offer 撲克牌順子
- 簡易撲克牌遊戲JAVA原始碼_新手上路遊戲Java原始碼
- Java入門第三季撲克牌小遊戲Java遊戲
- DFS實現拓撲排序排序
- 使用Java語言寫的一個簡單的撲克牌發牌程式碼Java
- SwiftUI:看我展示52張撲克牌,“很快啊!”SwiftUI
- JAVA入門第三季——最後練習題撲克牌Java
- java入門最後一章 簡易撲克牌比較大小Java
- Python程式設計基礎練習——撲克牌發牌問題Python程式設計
- 每日一練(33):撲克牌中的順子
- Java入門第三季7-1簡易撲克牌作業Java
- 圖解拓撲排序+程式碼實現圖解排序
- bzoj1816: [Cqoi2010]撲克牌(二分)
- 圖的拓撲排序詳解與實現排序
- [每日一題] 第十二題:撲克牌中的順子每日一題
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (二)Python遊戲
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (一)Python遊戲
- java實現快速排序Java排序
- 快速排序(java實現)排序Java
- 快速排序 java實現排序Java
- 拓撲排序排序
- Java 實現彙總排序Java排序
- Java實現氣泡排序Java排序
- 用 Java 實現的八種常用排序演算法Java排序演算法
- 排序演算法:Java實現希爾排序排序演算法Java
- 拓撲排序,YYDS排序
- 排序演算法Java實現排序演算法Java
- 排序演算法 Java實現排序演算法Java
- 關於撲克牌的一些討論——《Fluent Python 2》讀書筆記Python筆記
- 資料重整:用Java實現精準Excel資料排序的實用策略JavaExcel排序