冒泡排序一副卡片

Bubble sort a pack of cards

我把自己带到了一个我不知道如何摆脱的兔子洞里,我创造了一副随机牌。但是,我现在需要先按花色对它们进行排序,然后再按枚举的顺序对它们进行排序。首先我不知道如何从向量和枚举中获取元素,所以我可以比较它们,其次,我怀疑这个链接指向第一个我不确定如何交换它们,最后它会很好有一个冒泡排序的功能,我可以调用两次以先按花色排序,然后再次调用以按卡排序。

以下是库:

#include <iostream>
#include <vector>
#include <cstdlib>
using namespace std;
using std::vector;

这些是结构和枚举的:

enum Rank { ONE, TWO, THREE, FOUR, FIVE, SIX, SEVEN, EIGHT, NINE, TEN, JACK, QUEEN, KING, ACE }; // aspects of the card
enum Suit { HEARTS, CLUBS, DIAMONDS, SPADES };                                                    // suits of the card

struct Card {                       //Card data numbers
    Rank rank;
    Suit suit;
};

struct Deck {                      // defines a card
    vector<Card> cards;            // All the cards
    int size = 5;                  // Max deck size
};

这就是生成随机卡片组的原因:

void initialize(Deck& deck, string stdno) {
    for (int count=0; count < deck.size; count++) { //creates a deck of cards
        Card card;
        string rcardstr = stdno.substr(rand() % 8, 1) + stdno.substr(rand() % 8, 1);
        int rcard = stoi(rcardstr) % 52;
        card.suit = static_cast<Suit>(rcard / 13);     //cast between the enumerator and the value
        card.rank = static_cast<Rank>(1 + rcard % 13);
        deck.cards.push_back(card); //Adds the card to the deck of cards
    }
}

这是我在意识到前两个问题之前对冒泡排序的微弱尝试:

void bubble_sort(Deck& deck ){
    bool swapp = true;
    while (swapp) {
        swapp = false;
        for (int i=0; i < deck.size; i++) {
            if (deck.rank[0]
        }
    }
}

...最后是我的主要功能:

int main() {
    string stdno="14398132";
    Deck my_deck;
    initialize(my_deck, stdno);
}

如果有人愿意给我几分钟的时间来解释我需要学习的地方look/what我将非常感激并确保将同样的时间还给一旦我在 C++ 方面变得更好,就加入社区。

获取卡组成员的方法是这样写:

deck.cards[i].rank

deck.cards[i].suit

您有多个排序选项。

  1. 简单写两个函数:
void bubble_sort_by_rank(Deck& deck ){
    bool swapp = true;
    while (swapp) {
        swapp = false;
        for (int i=0; i < deck.cards.size()-1; i++) {
            if (deck.cards[i+1].rank > deck.cards[i].rank){
                //...
            }
        }
    }
}

void bubble_sort_by_suit(Deck& deck ){
    bool swapp = true;
    while (swapp) {
        swapp = false;
        for (int i=0; i < deck.cards.size()-1; i++) {
            if (deck.cards[i+1].suit > deck.cards[i].suit){
                //...
            }
        }
    }
}
  1. 写一个冒泡排序函数,但将排序条件作为参数(可以是枚举)。

  2. 写一个单一的冒泡排序函数,但首先比较每张牌的花色,如果它们相等,然后按等级比较它们,或者只是重载你的 Card class 的运算符 < 作为建议在评论中。这可能是首选方法,效率更高。

如果你不坚持使用冒泡排序,你可以使用 std::sort 和一个 lambda 函数,先按花色比较你的牌,然后按等级。

对于交换,你应该能够使用 std::swap 或自己编写一个简单的模板函数:

template <class T>
void swap(T& x,T& y)
{
     T temp;
     temp=x;
     x=y;
     y=temp;
}