rekursive Funktion vektor-elemente mischen



  • so, bin endgültig verwirrt, hab hier eine Funktion die die Elemente eines vektors zufällig durchmischen soll, die für mich keinen Sinn ergibt aber irgendwie trotzdem einen zufällig durchmischten Vektor erzeugt, kann mir wer sagen wieso?

    void random_shuffle(vector<int> &v) {

    if (v.size() > 2) {
    int x(get_random_number(1, v.size()));
    int y(v[0]);
    v[0] = v[x];


    vector<int> vi;
    for (int i(1); i < v.size(); ++i) {
    vi.push_back(v[i]);
    }
    random_shuffle(vi);
    }
    }


  • Mod

    Ein bisschen zusammengefasst, damit man erkennen kann, was passiert.

    void random_shuffle(vector<int> &v) {
    
        using std::swap;
        if (v.size() > 2) {
            swap(v[0], v[get_random_number(1, v.size())]);
            vector<int> vi(begin(v)+1, end(v));
            random_shuffle(vi);
        }
    }
    

    Die Funktion ändert gelegentlich den Ausgangsvektor, aber Mischen ist was anderes.


Log in to reply