diff --git a/07/selectionsort_zgr.c b/07/selectionsort_zgr.c new file mode 100644 index 0000000..b4cc84f --- /dev/null +++ b/07/selectionsort_zgr.c @@ -0,0 +1,124 @@ +/***************************************************************** + * Schreiben Sie ein Programm, das vom Benutzer abfragt, * + * wie viele Zahlen eingelesen werden sollen und diese * + * dann mittels SelectionSort sortiert. SelectionSort * + * geht eine Liste von Zahlen von links nach rechts durch, * + * ermittelt das Minimum der Zahlen, die rechts der aktuellen * + * Position liegen inklusive der Zahl der aktuellen Position, * + * und tauscht das Minimum mit der Zahl auf die aktuelle * + * Position. Alle Zahlen bis zu dieser Position inklusive gelten * + * dann als sortiert. Diese Prozedur wird für jede Position von * + * links nach rechts durchgeführt, bis alle Zahlen sortiert sind.* + * * + * Beispiel für Sortierung einer Liste 5 3 0 2: * + * Setze Minimum der Restliste an 1. Position: 0 3 5 2 * + * Setze Minimum der Restliste an 2. Position: 0 2 5 3 * + * Setze Minimum der Restliste an 3. Position: 0 2 3 5 * + * * + * Beispielhafte Ausgabe: * + * >> Wie viele Zahlen (max. 100)? fsdf * + * >> Fehler! Erneute Eingabe: -1 * + * >> Fehler! Erneute Eingabe: 101 * + * >> Fehler! Erneute Eingabe: 5 * + * >> Geben Sie die 1. Zahl ein: dsf * + * >> Fehler! Erneute Eingabe: 45 * + * >> Geben Sie die 2. Zahl ein: 1 * + * >> Geben Sie die 3. Zahl ein: 0 * + * >> Geben Sie die 4. Zahl ein: -4 * + * >> Geben Sie die 5. Zahl ein: 1423 * + * Sortierte Zahlen: -4 0 1 45 1423 * + * * + *****************************************************************/ + +#include +#include "../io/myio.h" + +#define MAX_ZAHLEN 100 + +void selectionsort(int array[], unsigned int len); +int *findeMax(int *anfang, int *ende); +void tausche(int *elem1, int *elem2); +void zeigeArray(int array[], unsigned int len); +unsigned int gibLaengeEin(unsigned int max); + +int main() +{ + int zahlen[MAX_ZAHLEN] = {0}; + unsigned int len = gibLaengeEin(MAX_ZAHLEN); + + for(int i = 0; i < len; i++) + { + printf("%d. Zahl:\n", i+1); + zahlen[i] = getNumber("Geben Sie eine Zahl ein: "); + } + + printf("\nEingebene Zahlen: "); + zeigeArray(zahlen, len); + selectionsort(zahlen, len); + printf("\nSortierte Zahlen: "); + zeigeArray(zahlen, len); + + + return 0; +} + +void zeigeArray(int array[], unsigned int len) +{ + for(int i = 0; i < len; i++) + { + printf("%3d ", array[i]); + } + printf("\n"); +} + +int *findeMax(int *anfang, int *ende) +{ + int *max = anfang; + + while(anfang <= ende) + { + if(*anfang > *max) + { + max = anfang; + } + anfang++; + } + + return max; +} + +void selectionsort(int array[], unsigned int len) +{ + for(int unsortierteLaenge = len; unsortierteLaenge >= 2; unsortierteLaenge--) + { + int *max = findeMax(array, array+unsortierteLaenge-1); + + tausche(max, &array[unsortierteLaenge-1]); + } +} + +/*void tausche(int array[], unsigned int idx1, unsigned int idx2) +{ + int tmp = array[idx1]; + array[idx1] = array[idx2]; + array[idx2] = tmp; +}*/ + +void tausche(int *elem1, int *elem2) +{ + int tmp = *elem1; + *elem1 = *elem2; + *elem2 = tmp; +} + +unsigned int gibLaengeEin(unsigned int max) +{ + unsigned int laenge = 0; + + printf("Maximale Laenge: %d\n", max); + + while(laenge <= 0 || laenge > max) + laenge = getNumber("Geben Sie die Anzahl an Zahlen ein: "); + + return laenge; +} \ No newline at end of file