info1_uebungen/07/selectionsort.c
2026-05-21 13:45:43 +02:00

104 lines
3.5 KiB
C

/*****************************************************************
* 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 <stdio.h>
#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;
}