Aufgabe 7 (10 Programmierpunkte - Abgabe per email bis 4.6. 10.00
Uhr)
Schreiben Sie eine C Funktion mit dem Namen my_countsort_matrikelnummer(),
welche eine Zeichenkette sortiert.
Die Deklaration der Funktion ist:
Ein zweiter Parameter für die Länge ist nicht nötig, da eine Zeichenkette definitionsgemäß mit dem Wert '\0' endet. Beim Namen der Routine ist matrikelnummer durch eine Ihrer Matrikelnummern zu ersetzen. Folgendes C Programm, bzw deren main-routine, soll nach Anpassung der Matrikelnummer als Testfunktion verwendet werden können.
main()
{
my_countsort_000000(feld);
printf("%s\n",feld);
}
my_comp(char *a, char *b)
{
return *a - *b;
}
my_countsort_000000(char *feld)
{
qsort(feld,strlen(feld), sizeof(char), my_comp);
}
Dabei wurde in diesem Beispiel die Systemfunktion qsort() verwendet. Sie sollen eine eigene Routine, die countsort verwendet, ohne Aufruf von Systemsortierroutinen schreiben. Um Speicher für die lokalen Hilfsfelder innerhalb von countsort zu bekommen empfiehlt sich die Routine calloc() um Speicher zu bekommen. Dieser dynamische Speicher muß natürlich mit free() vor dem Verlassen der Sortierroutine wieder freigegeben werden.
Aufgabe 8 (3+ 4 + 3 Punkte)
Formulieren Sie den Algorithmus countsort mittels
eines Flussdiagramms. (3 Punkte) Führen
Sie den countsort mit dem Feld der Länge 14 durch, welches sie durch
die Verknüpfung Ihrer beiden Matrikelnummern bekommen. Zulässige
Eintrage im Feld sind die Ziffern 0-9. (4 Punkte) Ist der Algorithmus countsort
stabil? Beweis. (3 Punkte)
Aufgabe 9 (6 Punkte)
Man konstruiere eine Eingabefolge der Lange 15, bei der
Heapsort maximale Schrittzahl benötigt. Beweis.