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


Anmelden zum Antworten