用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);
}
}
相關文章
- 用SQL實現撲克牌排序SQL排序
- 用C實現撲克牌排序排序
- 用C#實現撲克牌排序C#排序
- 用cpp0.5實現撲克牌排序排序
- Java 簡單實現撲克牌抽象類Java抽象
- 編碼也快樂!撲克牌排序JAVA排序Java
- 撲克牌排序:基於基數排序的方法排序
- 編碼也快樂活動:撲克牌排序排序
- 撲克牌排序-Scala之畫蛇添足版排序
- java程式:簡易撲克牌遊戲Java遊戲
- 純CSS實現撲克牌效果,太牛了吧CSS
- 編碼也快樂:撲克牌排序 - Python排序Python
- 編碼也快樂活動:撲克牌排序(JavaScript)排序JavaScript
- 撲克牌排序(JS版) 編碼也快樂!排序JS
- 簡易撲克牌遊戲簡單實現,歡迎指正遊戲
- 【YOLOv5】實現撲克牌的點數識別YOLO
- Java第三季—簡易撲克牌遊戲Java遊戲
- Java入門第三季撲克牌小遊戲Java遊戲
- 簡易撲克牌遊戲JAVA原始碼_新手上路遊戲Java原始碼
- Java學習--撲克牌比大小的小遊戲Java遊戲
- 自己寫的一個洗撲克牌的java程式Java
- 撲克牌速算24 -窮舉(JavaScript)JavaScript
- Java第三季撲克牌作業 參考了幕友的排序方法 非常感謝Java排序
- 使用Java語言寫的一個簡單的撲克牌發牌程式碼Java
- SwiftUI:看我展示52張撲克牌,“很快啊!”SwiftUI
- JAVA入門第三季——最後練習題撲克牌Java
- java入門最後一章 簡易撲克牌比較大小Java
- Python程式設計基礎練習——撲克牌發牌問題Python程式設計
- Java入門第三季7-1簡易撲克牌作業Java
- [每日一題] 第十二題:撲克牌中的順子每日一題
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (一)Python遊戲
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (二)Python遊戲
- 圖解拓撲排序+程式碼實現圖解排序
- 圖的拓撲排序詳解與實現排序
- 快速排序 java實現排序Java
- java實現快速排序Java排序
- 快速排序(java實現)排序Java
- 希爾排序java實現排序Java