/***************************************************************** * 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 #define MAX_ZAHLEN 100 void selectionsort(int array[], unsigned int len); unsigned int findeMaxIdx(int array[], unsigned int len); void tausche(int *elem1, int *elem2); void zeigeArray(int array[], unsigned int len); int main() { int zahlen[MAX_ZAHLEN] = {10, 5, 3, -1, 0, 2}; unsigned int len = sizeof(zahlen) / sizeof(zahlen[0]); unsigned int benutzteLaenge = 6; zeigeArray(zahlen, benutzteLaenge); selectionsort(zahlen, benutzteLaenge); zeigeArray(zahlen, benutzteLaenge); return 0; } void zeigeArray(int array[], unsigned int len) { for(int i = 0; i < len; i++) { printf("%3d ", array[i]); } printf("\n"); } unsigned int findeMaxIdx(int array[], unsigned int len) { unsigned int maxIdx = 0; for(int i = 1; i < len; i++) { if(array[i] > array[maxIdx]) { maxIdx = i; } } return maxIdx; } void selectionsort(int array[], unsigned int len) { for(int unsortierteLaenge = len; unsortierteLaenge >= 2; unsortierteLaenge--) { unsigned int maxIdx = findeMaxIdx(array, unsortierteLaenge); tausche(&array[maxIdx], &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; }