sortieralgorithmus für ein 2 dim arrays



  • hallo
    ich soll einen Sortieralgorithmus für ein beliebig großes zweidimensionales Array entwickeln. Die einzelnen Elemente sollen der Grösse nach sortiert werden.

    Z.B. so:

    cin>>m; // z.B. 3
    cin>>n; // z.B. 3

    sortiert sollte es so
    1 2 3
    4 5 6
    7 8 9

    oder so
    1 4 7
    2 5 8
    3 6 9
    aussehen

    die spalten werden bei meinen programm sortiert,aber nicht untereinander, das es dann wie ober beschrieben aussieht,ich weiß nicht wie ich es hinbekommen soll

    kann mir bitte jemand helfen

    hier ist mein programm

    #include <iostream.h>

    void main()
    {

    cout<<"Programm mit Sortieralgorithmus fuer einen zweidimensionalen Vektor\n\n";
    double xy[10][10], ablage; //Zeilen- und Spaltenanzahl definieren

    int zeilen, spalten, i, k, l, j;

    cout<<"Wieviele Zeilen? :";cin>>zeilen;
    cout<<"Wieviele Spalten? :";cin>>spalten;cout<<endl;

    for (i=0;i<zeilen;i++) //Eingabe der Werte
    {
    cout<<""<<i<<". Zeile eingeben : ";
    for (l=0;l<spalten;l++)
    {
    cin>>xy[i][l];
    }

    }
    //Sortieren
    for (l=0;l<spalten;l++)
    {

    for (i=0;i<zeilen;i++)
    {
    for(j=l;j<spalten;j++)
    {
    for(k=i;k<zeilen;k++)

    if (xy[i][l]>xy[k][j])
    {
    ablage=xy[i][l];
    xy[i][l]=xy[k][j];
    xy[k][j]=ablage;
    }
    }

    }
    }

    cout<<"\nAusgabe der sortierten Werte\n"; //Ausgabe
    for (i=0;i<zeilen;i++)
    {
    for (l=0;l<spalten;l++)
    {
    cout<<xy[i][l]<<" ";
    }
    cout<<endl;
    }

    }



  • Wenn ich's richtig verstanden habe, sollst Du die Werte genau so sortieren, wie sie in C++ auch im Speicher liegen (ich weiß nicht, ob das Standard ist?).

    Nehmen wir mal an, es sei so, dann gehts ganz einfach:

    double xy[3][3];
    // xy mit Werten füllen
    std::sort( &xy[0][0], &xy[2][2] + 1 ); // und sortieren.
    

    .. das setzt allerdings voraus, dass das 2D-Array vollständig benutzt wird. Es so nicht möglich ein 3x3-Feld in einem 10x10-Arrays zu sortieren. Wenn die Dimension flexibel sein soll, kann man sich damit behelfen, es auf dem Heap anzulegen .. 🙄

    Ansonsten bleibt die alte Regel: meide mehrdimensionale Felder - nehme 1-dimensionale - am besten gleich STL-Container und realisiere einen Zugriff über eine Index-Schlüssel mit zwei oder mehr Werten (siehe auch std::valarray).

    Gruß
    Werner


Anmelden zum Antworten