Card[] deck = CreateDeck();
static Card[] CreateDeck()
var suits = Enum.GetValues<Suit>();
var ranks = Enum.GetValues<Rank>();
var deck = new Card[suits.Length * ranks.Length];
foreach (var suit in suits)
foreach (var rank in ranks)
deck[i++] = new Card(suit, rank);
static void QuickSort(Card[] arr)
QuickSort(arr, 0, arr.Length - 1);
static void QuickSort(Card[] arr, int left, int right)
int pivotIndex = Partition(arr, left, right);
QuickSort(arr, left, pivotIndex - 1);
QuickSort(arr, pivotIndex + 1, right);
static int Partition(Card[] arr, int left, int right)
for (int j = left; j < right; j++)
if (CompareCards(arr[j], pivot) <= 0)
static int CompareCards(Card card1, Card card2)
int suitComparison = card1.Suit.CompareTo(card2.Suit);
return suitComparison != 0 ? suitComparison : card1.Rank.CompareTo(card2.Rank);
static void Swap<T>(T[] arr, int i, int j)
static void PrintDeck(Card[] deck)
foreach (Card card in deck)
record Card(Suit Suit, Rank Rank)
public override string ToString() => $"{Rank} of {Suit}";
enum Suit { Hearts, Diamonds, Clubs, Spades }
enum Rank { Ace, Two, Three, Four, Five, Six, Seven, Eight, Nine, Ten, Jack, Queen, King }