Insertion Sort bei int Werten im vector Container



  • Hallöchen zusammen,
    ich soll int Elemente in einem vector Container durch Insertion Sort sortieren, dabei sollen die Werte im vector zufällig sein. Den Code habe ich schon fertig (wird hier drunter gepostet), aber leider bekomme ich bei lo {0}, hi{100} und element {5} die Werte 53, 20, 50, 22, 63 also noch nicht sortiert heraus.

    Anmerkung:
    Die void ins_sort_v0() Funktion (Zeile 15) und die Syntax für zufällige Zahlen auto ri () in Zeile 44 wurde uns vorgegeben, dürfen wir also nicht verändern.

    Hat jemand eine Idee, was an meinem Code falsch ist?

    #include <iostream>
    #include <vector>
    #include <random>
    #include <functional>
    using namespace std;
    
    void swap_if(int& a, int& b)
    {
        if (b < a)
        {
            swap(a, b);
        }
    }
    
    void ins_sort_v0(vector<int>& vi, const unsigned int& ui, const unsigned int& oi)
    {
        for (unsigned int i{ ui + 1U }; i <= oi; ++i)
        {
            for (unsigned int j{ i }; ui < j; --j)
            {
                swap_if(vi.at(j - 1U), vi.at(j));
            }
        }
    }
    
    void print(vector<int>& vi)
    {
        for (unsigned i = 0; i < vi.size(); i++)
        {
            cout << vi[i] << " ";
        }
    }
    
    int main()
    {
        vector<int> test{};
        int lo{};
        int hi{};
        unsigned int element;
    
        cout << "Geben Sie einen kleinen und einen grossen Wert ein: " << endl;
        cin >> lo >> hi;
    
        auto ri = std::bind(std::uniform_int_distribution<int>{lo, hi}, std::default_random_engine{});
        cout << "Geben Sie die Anzahl der Werte an, die Sie als Elemente haben moechten: " << endl;
        
        cin >> element;
    
        for (unsigned i{ 0U }; i < element; i++)
        {
    
            test.push_back(ri(lo, hi));
        }
    
        ins_sort_v0(test, test.at(0), test.size() - 1);
    
        
        print(test);
        
    }
    


  • Der Aufruf sieht falsch aus, ins_sort_v0 nimmt anscheinend die Indizes entgegen.

    ins_sort_v0(test, test.at(0), test.size() - 1);
    

    Hier rufst du ins_sort_v0 mit dem Wert des ersten Elements auf.



  • This post is deleted!


  • @yahendrik danke für das Feedback, wie müsste es denn richtig aussehen?



  • Weißt du denn, was mit Index (bzw. in der Mehrzahl Indizes) gemeint ist?

    PS: Deinem Lehrer sollte man mal ein paar Buchstaben schenken, denn mit ui undoi sind wohl unterer_index und oberer_index gemeint...


Log in to reply