Werte sortieren mit for-schleifen



  • hallo C-PlusPlus Community

    Ihr kennt das sicher alle, ein Programm der Zahlen sortieren soll....

    Ich hab ein kleines Programm geschrieben, mit 2 INT Arrays und 2 Schleifen aber die Ausgabe die stimmt nicht:

    int v1[10], v2[10];
        int i1, i2;
        cout << "Die zu sortierenden Werte eingeben!!!" << endl;
        for (i1=0; i1<10; i1++)
        {
            cin >> v1[i1];
        }
        for (i1=0; i1<10; i1++)
        {
            for (i2=0; i2<10; i2++)
            {
                if (v1[i1] < v1[i2+1])
                {
                          v2[i1] = v1[i1]; 
                }
            }
        }
        for (i1 =0; i1<10;i1++)
        {
            cout << v2[i1] << "\n";
        }
    

    ich bekomme genau das raus, was ich auch eingegeben habe, den Fehler kann ich einfach nicht finden....
    Bitte um Hilfe



  • Yibolaxin schrieb:

    hallo C-PlusPlus Community

    Ihr kennt das sicher alle, ein Programm der Zahlen sortieren soll....

    Ich hab ein kleines Programm geschrieben, mit 2 INT Arrays und 2 Schleifen aber die Ausgabe die stimmt nicht:

    int v1[10], v2[10];
        int i1, i2;
        cout << "Die zu sortierenden Werte eingeben!!!" << endl;
        for (i1=0; i1<10; i1++)
        {
            cin >> v1[i1];
        }
        for (i1=0; i1<10; i1++)
        {
            for (i2=0; i2<10; i2++)
            {
                if (v1[i1] < v1[i2+1])
                {
                          v2[i1] = v1[i1]; 
                }
            }
        }
        for (i1 =0; i1<10;i1++)
        {
            cout << v2[i1] << "\n";
        }
    

    ich bekomme genau das raus, was ich auch eingegeben habe, den Fehler kann ich einfach nicht finden....
    Bitte um Hilfe

    Du hast in Zeile 12 schon mal einen Arrayzugriffsfehler. Außerdem sehe ich keinen Grund, warum dein Programm die Zahlen sortieren soll... Möchtest du so etwas wie Selectionsort schreiben?


  • Mod

    Yibolaxin schrieb:

    ich bekomme genau das raus, was ich auch eingegeben habe

    Das würde ich auch erwarten. Beschreib doch mal in Worten, wie dein Algorithmus arbeiten soll.

    Nebenbei: Hier besteht auch noch ein Problem mit der Indizierung: der größte Wert, den i2 annehmen kann, ist 9; dann greifst du aber mit v1[i2+1] auf das 11-te Element von v1 zu, obwohl v1 nur 10 Elemente hat.



  • also meine Absicht lag darin, einen 2. Array zu schreiben, wobei die Werte nach dem Vergleich im 2. Array sortiert kopiert werden.

    und das mit der 12. zeile war Absicht, denn wenn die 1. zahl kleiner ist als die 2., dann soll die 1. weiterhin mit der 3. zahl verglichen werden usw.


  • Mod

    Yibolaxin schrieb:

    also meine Absicht lag darin, einen 2. Array zu schreiben, wobei die Werte nach dem Vergleich im 2. Array sortiert kopiert werden.

    und das mit der 12. zeile war Absicht, denn wenn die 1. zahl kleiner ist als die 2., dann soll die 1. weiterhin mit der 3. zahl verglichen werden usw.

    Welcher Vergleich? Dein Algorithmus enthält davon ja eine ganze Menge.



  • na halt welche zahl kleiner ist ... oder was meinst du 😕


  • Mod

    Gegenwärtig vergleichst du jede Zahl mit jeder anderen Zahl (bis auf die falsche Indizierung, die dazu führt dass du mit dem 2. bis 11. Element vergleichst).
    Das Zielarray wird beschrieben, falls es irgendeine Zahle in dem Array gibt, die größer als die aktuelle Zahl ist (wiederum: genaugenommen irgendeines der 2. bis 11. Elemente).
    Das ist garantiert für alle Zahlen außer der Größten irgendwann mal der Fall. Und dann beschreibst du das Zielarray mit genau dem Wert, den das Ausgangsarray an der gleichen Stelle hat, eine Umordnung findet also offensichtlich nicht statt.



  • ich überdenke mein algorithmus noch einmal in aller Ruhe... Danke für die Mühe Leute 🙂


Anmelden zum Antworten