Array sortieren, Array an Funktion übergeben

sa.afina

Grünschnabel
Hi, ich habe mal wieder ein Problem. Ich will ein Programm schreiben, dass ein beliebig langes Array int arr, mit vom Benutzer eingegebenen Werten an eine Funktion sortieren(arr[], groesse) übergibt und dort sortiert. Das Array wird mehrmals von vorne bis hinten durchlaufen und benachbarte Element, die in der falschen Reihenfolge stehen sollen vertauscht werden. Ich poste mal, was ich mir gedacht habe. Ich weiß allerdings überhaupt nicht, wie ich das Array an die Funktion übergeben soll, also wie ich das mit Zeigern oder Referenzen machen soll...und ich weiß auch nicht, ob das sortieren so klappt, da ich es noch nicht testen konnte...
Vielen Dank schonmal.

C++:
#include <iostream>
using namespace std;

void sortieren (int arr[], int groesse)
{
    int w;
    for (int i=0; i<groesse; i++)
    {
        if(arr[groesse-1] > arr[groesse])
        {
            arr [groesse-1] = w;
            arr[groesse] = arr[groesse-1];
            w = arr [groesse];

        }
    }
}
int main()
{
    int groesse;
    cout << "Bitte geben sie die Groesse des Arrays ein" << endl;
    cin >> groesse;

    int arr[groesse];
    for (int i = 0; i<groesse; i++)
    {
        cout << "Bitte geben sie einen Wert ein" << endl;
        cin >> arr[groesse];
    }

    for (int i=0; i<groesse; i++)
    {
        sortieren(arr[groesse], groesse);

    }


    cout << arr[groesse] << endl;
    return 0;
}
 
Ich habe jetzt noch ein bisschen rumprobiert. Und habe glaube ich zumindest das Array schonmal an die Funktion übergeben. Aber das Ergebnis ist leider nicht das sortierte Array...
Code:
#include <iostream>
using namespace std;

void sortieren (int arr[], int groesse)
{
    int w;
    for (int i=0; i<groesse; i++)
    {
        if(arr[groesse-1] > arr[groesse])
        {
            w = arr [groesse];
            arr [groesse-1] = w;
            arr[groesse] = arr[groesse-1];


        }
    }
}
int main()
{
    int groesse;
    cout << "Bitte geben sie die Groesse des Arrays ein" << endl;
    cin >> groesse;

    int arr[groesse];
    for (int i = 0; i<groesse; i++)
    {
        cout << "Bitte geben sie einen Wert ein" << endl;
        cin >> arr[groesse];
    }


        sortieren(&arr[0], groesse);


    cout << arr[groesse] << endl;
    return 0;
}
 
C/C++ ist bei mir sehr lange her, aber vom Algorithus her ist klar, warum es nicht funktioniert:
Mit einem Durchlauf ist das Sortieren nicht getan, sondern Du musst es wiederholen, bis keine Vertauschungen mehr stattgefunden haben.
 
Hi
Aber das Ergebnis ist leider nicht das sortierte Array...
Deine Sortierfunktion ist etwas seltsam. Du tauschst immer das Element bei "groesse" (was ja ein Element ausserhalb des arrays ist) mit dem letzten Element des Arrays.
Also zuerst einmal groesse -> i in der Sortierfunktion.
Selbst das wird aber noch nicht sortieren. Deine Sortierfunktion sollte wohl Bubblesort sein. Dafür brauchst du aber 2 Loops: Einen, der jeden Wert hochblubbert (daher der Name) und einen Loop, der über alle Einträge geht.
Siehe auch: Bubble sort - Wikipedia

Gruss
cwriter
 
Vielen lieben Dank nochmal an euch beide. Ich habe es jetzt hinbekommen und es läuft. Ich musste natürlich meine Funktion ändern, sie auch in einer Schleife aufrufen, aber auch bei der Ausgabe hab ich einen Fehler gemacht, weil ich ja logischerweise auch das in einer Schleife machen muss, wenn ich alle Werte ausgegeben haben will...

C++:
#include <iostream>
using namespace std;

void sortieren (int arr[], int groesse)
{
    int w;
    for (int n=groesse; n>1; n--)
    {
        for (int i=0; i<n-1; i++)
    {
        if(arr[i] > arr[i+1])
        {
            w = arr [i];
            arr[i] = arr[i+1];
            arr [i+1] = w;



        }
    }


    }
}
int main()
{
    int groesse;
    cout << "Bitte geben sie die Groesse des Arrays ein" << endl;
    cin >> groesse;

    int arr[groesse];
    for (int i = 0; i<groesse; i++)
    {
        cout << "Bitte geben sie einen Wert ein" << endl;
        cin >> arr[i];
    }


        for (int a=0; a<groesse; a++)
        {
            sortieren(&arr[0], groesse);

            cout << arr[a] << endl;
        }


    return 0;
}
 
Zurück