Mit C Eine Matrix Sortieren



  • uten morgen, ich brauch mal einen kleinen Denkanstoß,

    Also ich habe ein Stückchen Code gebastelt, dass mir eine Matrix nxn ausgibt, die mit Zufallszahlen von 1 -100 gefüllt wird. Jetzt möcht ich die Matrix sortieren und da stehe ich irgendwie auf dem Schlauch. Nen einfacher Vektor mit Bubble Sort ist ja kein Problem aber ich kriegs nicht hin auf ne Matrix zu übertragen....

    könnt ihrm ir da mal nen Anstoß geben ??

    #include <stdio.h>
    #include <string.h>
    #include <fb5.h>
    
    void main(void) {
    
    int a[11][11],i,j;
    
    for(i=1;i<=10;++i)
        for(j=1;j<=10;++j)
            a[i][j] = (int)(100*rnd()+1);
    
    for(i=1;i<=10;++i)
    {
        printf("\n");
        for(j=1;j<=10;++j)
            printf("%5d",a[i][j]);
    }
    
    printf("\n\n\n");
    
    }
    

    Gruß
    Sascha



  • Was soll denn herauskommen, wenn du die Matrix "sortierst"? Soll jede Spalte für sich geordnet sein? oder jede Zeile?



  • achja 🙂

    die Zahlen sollen alle aufsteigend sortiert sein also über die ganze Matrix!



  • Dir ist klar, daß die Matrix zweidimensional ist - da gibt es mehrere Möglichkeiten, eine Sequenz zu bilden.

    (beim 1D Vektor ist die Reihenfolge klar - wenn i<j, dann v[i]<=v[j] - bei der Matrix mußt du verschiedene Fälle zur gegenseitigen Lage betrachten)



  • ja ich weiß, dass ist ja mein Problem 😉

    ich hab mir die Aufgabe auch nicht selber ausgedacht:

    Kann ja mal FLux die Aufgabe die mein Prof gestellt hat hier reinkopieren:

    E13) In der angezeigten Funktion
    #include <fb5.h>
    #include <stdio.h>
    void main( void )
    {
    int a[11][11], i, j;
    for (i = 1; i <= 10; ++i)
    for (j = 1; j <= 10; ++j)
    a[i][j] = (int)(100 * rnd( ) +1);
    for (i = 1; i <= 10; ++i)
    {
    printf("\n");
    for (j = 1; j <= 10; ++j)
    printf("%5d", a[i][j]);
    }
    }


    nicht benutzt. Dann bleibt eine 10 * 10-Matrix übrig, die von der Funktion mit Zufallszahlen
    im Größen-Bereich von 1 bis 100 gefüllt wird. Der dann kommende Abschnitt ist von Ihnen
    einzusetzen. Danach wird die Matrix angezeigt.
    a. Der von Ihnen zu schreibende Programm-Abschnitt soll die Zahlen der Matrix nach der
    Größe sortieren. Die kleinsten Zahlen werden dann in der ersten Zeile, die größten in der
    letzten Zeile stehen. Zum Beispiel soll der Abschnitt den Inhalt der Matrix a[ ][ ]

    69 18 89 56 78 31 1 71 51 69
    97 90 48 100 96 6 80 85 2 15
    11 36 85 69 65 80 38 18 48 58
    13 29 18 71 80 96 69 85 74 1
    95 69 70 19 19 32 93 12 72 24
    38 27 76 89 46 69 49 85 88 60
    91 22 31 83 77 26 52 89 32 41
    88 48 77 58 62 18 62 59 64 5
    7 53 28 21 8 51 94 67 48 83
    28 37 6 20 70 16 8 78 83 63
    in den Inhalt
    1 1 2 5 6 6 7 8 8 11
    12 13 15 16 18 18 18 18 19 19
    20 21 22 24 26 27 28 28 29 31
    31 32 32 36 37 38 38 41 46 48
    48 48 48 49 51 51 52 53 56 58
    58 59 60 62 62 63 64 65 67 69
    69 69 69 69 69 70 70 71 71 72
    74 76 77 77 78 78 80 80 80 83
    83 83 85 85 85 85 88 88 89 89
    89 90 91 93 94 95 96 96 97 100
    umordnen. Führen Sie nach Bedarf neue Variable und/oder ein neues Array ein. (Alle
    Variablen-Definitionen müssen am Anfang des Funktions-Blocks, unmittelbar nach der
    geschweiften Klammer, stehen.) Wählen Sie dazu ein Sortierverfahren aus

    Die einzelen Zeilen sortieren kriegi ch noch hin aber halt das Zeilenübergreifende.. hab ich keine Idee 😞



  • Ja, mit dem Beispiel wird auch die Sortierung klarer - die primitivste Lösung wäre es, erst alle Daten in ein lineares Array zu packen, dort zu sortieren und anschließend wieder zurückzuschreiben (oder du führst dieses Kopieren nur in Gedanken aus und rechnest die 2D-Indizes in 1D um - "index=(i-1)+10*(j-1);" bzw. "i=index%10+1;j=index/10+1;").



  • ja das mit dem einfachen Array hati ch mir eben auch schonmal überlegt ich denke das gemessen an meinrm bisherirgen können die einfachste Lösung.

    Ich werde mich mal in der richtung probieren!

    vielen Dank und eine schönes WE

    Gruß
    Sascha



  • so hat geklappt,
    falls es wen interessiert hier meine Lösung:

    /*Aufgabe E13*/
    
    #include <stdio.h>
    #include <string.h>
    
    void main(void) {
    
    int a[11][11],i,j,x[100],k=1,temp;
    
    /*befüllen der Matrix mit 100 Zufallszahlen*/
    for(i=1;i<=10;++i)
    	for(j=1;j<=10;++j)
    		a[i][j] = (int)(100*rnd()+1);
    
    /*Schreibt die Elemente der Matrix in ein Array*/
    for(i=1;i<=10;++i)
    	for(j=1;j<=10;++j)
    	{
    		x[k] = a[i][j];
    		k++;
    	}
    
    /*Bubbel Sort auf das Array x[] */
    for(j=100; j>=2;j--)
    	for(i=2;i<=j;i++)
    		if(x[i-1]>x[i])
    		{
    			temp = x[i];
    			x[i] = x[i-1];
    			x[i-1] = temp;
    		}
    
    /*Schreibt das Array wieder in eine Matrix */
    k=1;
    for(i=1;i<=10;++i)
    	for(j=1;j<=10;++j)
    	{
    		a[i][j] = x[k];
    		k++;
    	}
    
    /*Gibt die Matrix aus */
    for(i=1;i<=10;++i)
    {
    	printf("\n");
    	for(j=1;j<=10;++j)
    		printf("%5d",a[i][j]);
    }
    
    printf("\n\n\n");
    
    }
    

    Gruß
    Sascha


Anmelden zum Antworten