Bogosort (ohne Methoden, nur Main Funktion)

Sekiro24

Mitglied
Hallo Community.
Ich stehe vor einer Aufgabe und weiss nicht ganz wie ich das realisieren soll.
Ich soll den Bogosort Allgorithmus programmieren ohne zusätzliche Funktionen zu benutzen.
Ich habe mir bereits Gedanken gemacht.
Also das Array hat 8 Felder bzw. 8 Elemente, diese sind vom Typ Int.
Die Elemente der Felder sind -1,0,-25,100,6,-3,-2,25.
Jetzt habe ich mir das so vorgestellt, dass ich zuerst eine For-Schleife schreibe, die von i = 1 mit der Bedingung i <= 8 bei i++ das Array durchläuft.
In der For-Schleife ist dann eine If Anweisung, die dann guckt ob das Element an der Stelle i größer ist als an der Stelle i + 1.
Falls das der Fall ist soll dann an der Zuffälligen Stelle r = rand() % 8 , die Elemente des Feldes an der Stelle r mit dem der Stelle i tauschen.

Also wie folgt.
C:
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
#include <time.h>

main()
{
        
        int unsortiert[] = {-1,0,-25,100,6,-3,-2,25};
        int temp, r, r;
        printf("unsortiertes Array:\n");
        printf("---------------------\n");
        for(i = 1; i <= sizeof(unsortiert)/sizeof(int); i++){
            printf("%d. %d\n", i ,unsortiert[i-1]);
        }
        /* Vertauschung und Abfrage soll hier passieren.
        srand(time(NULL));
        for(j = 1; j <= 8; j++){
            if(unsortiert[j-1] > unsortiert[j]){
                temp = unsortiert[j];
                r = rand()%8;
                unsortiert[j] = unsortiert[r];
                unsortiert[r] = temp;
            }       
        }
        */

}
Die Frage ist, wie kann ich das so schreiben, dass zuerst die Vertauschung kommt und dann die Abfrage ob die Elemente des Arrays an der i-ten Stelle kleiner ist als die i+1 Stelle. Daraufhin sollen alle Stellen auch die unsortierten Stellen nach der Vertauschung ausgegeben werden. Sobald das Array sortiert wurde, soll das Array ein letztes mal ausgegeben werden.
Ich hoffe das ich das Problem so gut wie möglich darstellen konnte.

freundliche Grüße :)
 
Das geht übrigens idiomatischer mit "while (1)". Edit: Ich habe gerade gesehen, dass @cwriter dir diesen Code oben vorgeschlagen hat ;) Er hat es dir wahrscheinlich einfacher machen wollen, um folgende Erklärung sich zu sparen: Vergleiche werden in C zu einem int ausgewertet.* Wahre Vergleiche werden zu einer Zahl, die nicht 0 ist ausgewertet, klassischerweise 1. Also sowas wie "1 == 1" wird zu 1 ausgewertet, während "42 == 84" zu "0" ausgewertet wird. Die Schleife wiederholt solange, wie das Argument ungleich 0 ist.

*) Ob das wirklich ein int ist oder ein anderer numerischer Datentyp, darüber bin ich mir gerade nicht sicher. Also meinen Absatz oben nicht für den C-Standard halten ;) Aber sonst sollte er komplett richtig sein.
 
Er hat es dir wahrscheinlich einfacher machen wollen, um folgende Erklärung sich zu sparen
Hat er :)

Ob das wirklich ein int ist oder ein anderer numerischer Datentyp, darüber bin ich mir gerade nicht sicher.
Es ist ein int, du hast schon recht.
Comparison operators - cppreference.com

while() selbst frisst aber einen beliebigen Skalartyp und beendet, wenn der Ausdruck auf 0 evaluiert - man könnte also auch while(42) schreiben :)
http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1124.pdf Seite 135 (147 nach PDF-Reader) beschreibt das so:
The controlling expression of an iteration statement shall have scalar type.
[...]
An iteration statement causes a statement called the loop body to be executed repeatedly until the controlling expression compares equal to 0.


Gruss
cwriter
 
Zuletzt bearbeitet:
Zurück