124 lines
3.8 KiB
C
124 lines
3.8 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>
|
|
#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;
|
|
} |