2D Array sortieren
-
Die Idee hatte ich auch schon aber nach Rücksprache mit dem Prof ist mir das untersagt worden

-
Also mir fällt kein Algorithmus ein, mit dem man ein 2D-Array sortieren kann. Wär aber mal interessant, ob es sowas gibt.
Wikipedia schweigt sich zu dem Thema auch aus.
-
Trotzdem erstmal vielen Dank. Werde dann wohl noch einige Nächte mit dicken Augenringen am Laptop sitzen und rumtesten

-
Frag dein Prof doch nochmal, ob er dir wenigstens einen Ansatz geben kann. Kann dich ja nicht einfach so ins kalte Wasser werfen.
-
Oh doch, genau so ein A.... ist das
-
Dieser Thread wurde von Moderator/in SideWinder aus dem Forum DOS und Win32-Konsole in das Forum C++ verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
2D-Array als 1D-Array behandeln:
Array[i%m][i/m]
i würde dann von 0 bis n*m-1 laufen
-
#include <cstdlib> #include <iostream> #include <ctime> using namespace std; void print_array2d( int **array, size_t rows, size_t cols ); void sort_array2d_horz( int **array, size_t rows, size_t cols ); void sort_array2d_vert( int **array, size_t rows, size_t cols ); int main( int argc, char *argv[] ) { size_t cols = 0; size_t rows = 0; int max = 0; srand( ( unsigned int ) time( 0 ) ); cout << "columns: "; cin >> cols; cout << "rows: "; cin >> rows; cout << "maximum: "; cin >> max; cout << endl; if( !( rows && cols ) ) { cout << "Number of columns and rows needs to be > 0!" << endl; return -1; } max = ( max < 0 ? -max : max ) + 1; int **array = new int*[rows]; for( size_t i = 0; i < rows; ++i ) array[i] = new int[cols]; for( size_t y = 0; y < rows; ++y ) for( size_t x = 0; x < cols; ++x ) array[y][x] = rand() % max; cout << "Unsorted, random values:" << endl; print_array2d( array, rows, cols ); sort_array2d_horz( array, rows, cols ); cout << endl << "horizontal sorted array:" << endl; print_array2d( array, rows, cols ); sort_array2d_vert( array, rows, cols ); cout << endl << "vertical sorted array:" << endl; print_array2d( array, rows, cols ); for( size_t i = 0; i < rows; ++i ) delete[] array[i]; delete[] array; array = 0; return 0; } void print_array2d( int **array, size_t rows, size_t cols ) { for( size_t y = 0; y < rows; ++y ) { for( size_t x = 0; x < cols; ++x ) { cout.width( 4 ); cout << right << array[y][x]; } cout << endl; } } void sort_array2d_horz( int **array, size_t rows, size_t cols ) { int tmp = 0; bool sorted = false; do { sorted = true; for( size_t y = 0; y < rows; ++y ) { for( size_t x = 0; x < cols; ++x ) { if( !( ( y == ( rows - 1 ) ) && ( x == ( cols - 1 ) ) ) ) { if( x < ( cols - 1 ) ) { if( array[y][x] > array[y][x+1] ) { tmp = array[y][x]; array[y][x] = array[y][x+1]; array[y][x+1] = tmp; sorted = false; } } else { if( array[y][x] > array[y+1][0] ) { tmp = array[y][x]; array[y][x] = array[y+1][0]; array[y+1][0] = tmp; sorted = false; } } } } } } while( !sorted ); } void sort_array2d_vert( int **array, size_t rows, size_t cols ) { int tmp = 0; bool sorted = false; do { sorted = true; for( size_t x = 0; x < cols; ++x ) { for( size_t y = 0; y < rows; ++y ) { if( !( ( y == ( rows - 1 ) ) && ( x == ( cols - 1 ) ) ) ) { if( y < ( rows - 1 ) ) { if( array[y][x] > array[y+1][x] ) { tmp = array[y][x]; array[y][x] = array[y+1][x]; array[y+1][x] = tmp; sorted = false; } } else { if( array[y][x] > array[0][x+1] ) { tmp = array[y][x]; array[y][x] = array[0][x+1]; array[0][x+1] = tmp; sorted = false; } } } } } } while( !sorted ); }Ist zwar nur ein dämlicher Bubblesort, aber bei solch einer Aufgabenstellung frag' ich mich sowieso, ob euer Professor ganz da ist.
Greetz, Swordfish
-
Wow ist das cool, zwar ein riesen Aufwand aber hauptsache es funzt.
DANKE
-
Na besten Dank für deinen Dank, aber WTF ist daran kompliziert?
Simpler gehts nimmer
.Greetz, Swordfish