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. 3sortiert sollte es so
1 2 3
4 5 6
7 8 9oder so
1 4 7
2 5 8
3 6 9
aussehendie 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 definierenint 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