用C#實現撲克牌排序
看到各大語言都有了,怎麼能沒有C#?
思路:同樣是給牌賦權重,轉換成對權重的排序。用最簡單的氣泡排序實現。另外不用轉換成權重也是很簡單的,可以先對花色進行分組,對每個組進行排序,再對分組的key進行排序。
優點:用C#實現的話,至少可以顯得OO一點。另外排序演算法是與具體物件無關的,是個通用的演算法。
先定義Card
類,以及相關列舉:
class Card
{
public CardSuit Suit { get; private set; }
public CardValue Value { get; private set; }
public int Weight { get { return (int)Suit * (int)Value; } }
Card(CardSuit suit, CardValue value)
{
Suit = suit;
Value = value;
}
public static Card Of(CardSuit suit, CardValue value)
{
return new Card(suit, value);
}
public override string ToString()
{
return Suit.ToString() + Value.ToString();
}
}
enum CardSuit
{
Spade = 1, Heart = 10, Club = 100, Diamond = 1000
}
enum CardValue
{
Tow = 2, Three = 3, Four = 4, Five = 5, Six = 6, Seven = 7, Eight = 8, Nine = 9, Ten = 10, Jack = 11, Queen = 12, King = 13, Ace = 14
}
與具體物件無關的氣泡排序:
static TSource[] BubbleSort<TSource, TKey>(TSource[] elements, Func<TSource, TKey> keySelector)
{
TSource tempElement;
Comparer<TKey> comparer = Comparer<TKey>.Default;
int j = elements.Length;
while (j > 0)
{
for (int i = 0; i < j -1; i++)
{
if (comparer.Compare(keySelector(elements[i]), keySelector(elements[i + 1])) > 0)
{
tempElement = elements[i];
elements[i] = elements[i + 1];
elements[i + 1] = tempElement;
}
}
j--;
}
return elements;
}
獲取亂序撲克的演算法要複雜得多了,這個前兩天左耳朵耗子討論過。不過由於題目中規定亂序撲克是給定的條件,所以就無需擔心這一點了。其餘程式碼如下:
static void Main(string[] args)
{
var cards = SortedCard();
foreach (var card in cards)
{
Console.WriteLine(card);
}
Console.ReadLine();
}
static Card[] SortedCard()
{
var cards = GetCards();
return BubbleSort(cards, card => card.Weight);
}
static Card[] GetCards()
{
var cards = new Card[] { Card.Of(CardSuit.Club, CardValue.Seven),
Card.Of(CardSuit.Heart, CardValue.Jack),
Card.Of(CardSuit.Spade, CardValue.Ace),
Card.Of(CardSuit.Heart, CardValue.Tow),
Card.Of(CardSuit.Club, CardValue.King),
Card.Of(CardSuit.Diamond, CardValue.Ace),
Card.Of(CardSuit.Diamond, CardValue.Five),
Card.Of(CardSuit.Spade, CardValue.Nine),
// other cards...
};
return cards;
}
相關文章
- 用SQL實現撲克牌排序SQL排序
- 用C實現撲克牌排序排序
- 用Java實現撲克牌排序Java排序
- 用cpp0.5實現撲克牌排序排序
- 撲克牌排序:基於基數排序的方法排序
- Java 簡單實現撲克牌抽象類Java抽象
- 編碼也快樂活動:撲克牌排序排序
- 編碼也快樂!撲克牌排序JAVA排序Java
- 撲克牌排序-Scala之畫蛇添足版排序
- 純CSS實現撲克牌效果,太牛了吧CSS
- 編碼也快樂:撲克牌排序 - Python排序Python
- 編碼也快樂活動:撲克牌排序(JavaScript)排序JavaScript
- 撲克牌排序(JS版) 編碼也快樂!排序JS
- 簡易撲克牌遊戲簡單實現,歡迎指正遊戲
- 【YOLOv5】實現撲克牌的點數識別YOLO
- python實現撲克遊戲 - 抽鬼牌 和 21點Python遊戲
- java程式:簡易撲克牌遊戲Java遊戲
- 撲克牌速算24 -窮舉(JavaScript)JavaScript
- SwiftUI:看我展示52張撲克牌,“很快啊!”SwiftUI
- DFS實現拓撲排序排序
- Java第三季—簡易撲克牌遊戲Java遊戲
- Python程式設計基礎練習——撲克牌發牌問題Python程式設計
- Java入門第三季撲克牌小遊戲Java遊戲
- 簡易撲克牌遊戲JAVA原始碼_新手上路遊戲Java原始碼
- Java學習--撲克牌比大小的小遊戲Java遊戲
- 自己寫的一個洗撲克牌的java程式Java
- Java第三季撲克牌作業 參考了幕友的排序方法 非常感謝Java排序
- [每日一題] 第十二題:撲克牌中的順子每日一題
- 使用Java語言寫的一個簡單的撲克牌發牌程式碼Java
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (一)Python遊戲
- python例項:解決經典撲克牌遊戲 -- 四張牌湊24點 (二)Python遊戲
- 圖解拓撲排序+程式碼實現圖解排序
- JAVA入門第三季——最後練習題撲克牌Java
- 圖的拓撲排序詳解與實現排序
- java入門最後一章 簡易撲克牌比較大小Java
- Java入門第三季7-1簡易撲克牌作業Java
- 拓撲排序排序
- 關於撲克牌的一些討論——《Fluent Python 2》讀書筆記Python筆記