forked from paulusja/info1_uebungen
104 lines
3.5 KiB
C
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;
|
|
} |