Brauche Starthilfe: Sortieren durch Auswahl-Algorithmus

Safran

Grünschnabel
Hallo Community,

ich sitze hier gerade vor einer Aufgabe und komme nicht voran:

Definieren Sie einen neuen Datentyp name als ein Feld von 20 char-Einträgen. Schreiben Sie nun eine Funktion

void selectionSort(int n, name a[ ])

welche die im Feld a gespeicherten Namen a0, ... an-1 in alphabetische aufsteigender Reihenfolge (A, B, C, D,..., Z) sortiert, d. h. nach dem Aufruf enthalten die ersten Komponenten von a dieselben n Namen wie zuvor, aber in sortierter Reihenfolge.

Meine Frage beginnt schon einmal recht elementar. Wie definiere ich den neuen Datentyp name?

Ich nehme nicht an, dass es mit

C:
typedef char name[20];

erledigt wäre. Das ergibt keinen Sinn, aber ich weiß im Moment auch nicht wie ich es sinnvoll definieren sollte. Ich stehe irgendwie auf dem Schlauch :(

Es wäre wohl auch sinnvoll, für diese Aufgabe ein zweidimensionales Feld zu wählen, oder liege ich da falsch? Denn die Namen selbst, sind ja auch nur Arrays...

Eine weitere Frage wäre, welche Werte ich an die Funktion übergeben sollte. Ich brauche ja einen Int-Wert und einen Array.
Übergebe ich als Int-Wert immer die "0", da er am Anfang mit dem Sortieren anfangen soll, und als Array... Hmm, da weiß ich schon nicht mehr weiter. Ich stehe im Moment wirklich auf dem Schlauch. Vielleicht habe ich ja zu viel überlegt und sehe den Wald vor lauter Bäumen nicht mehr. :(

Kann mir jemand eine Starthilfe geben? Danke!
 
C:
#include <stdio.h>
#include <string.h>

typedef char name[20];

void selectionSort(int iSize, name names[]);

int main(int argc, char argv[])
{
        int i;
        name names[5] = {"Max", "Norbert", "Alex", "Peter", "Jochen"};
        
        selectionSort(5, names);
        
        for(i = 0; i < 5; i++)
        {
                printf("Name: %s\n", names[i]);
        }
        
        return 0;
}

void selectionSort(int iSize, name names[])
{
        int i, iModified;
        name tmpName;
        
        do
        {
                iModified = 0;
                
                for(i = 0; i < iSize - 1; i++)
                {
                        // Wenn die nächste Position im Feld lexikalisch kleiner ist als die aktuelle, vertauschen
                        if(strcmp(names[i], names[i + 1]) > 0)
                        {
                                strcpy(tmpName, names[i + 1]);
                                
                                strcpy(names[i + 1], names[i]);
                                
                                strcpy(names[i], tmpName);
                                
                                iModified = 1;
                        }
                }
        } while (iModified != 0); // Feld solange durchlaufen, wie wir etwas verändert haben. Sobald das nicht mehr der Fall ist, habe wir fertig sortiert
}
 
Das sieht aber eher nach Bubblesort aus. Aber das mit dem Selectionsort sollte Safran selbst hinkriegen (sonst hätte er die Aufgabe vermutlich nicht gestellt bekommen).

Grüße, Matthias
 

Neue Beiträge

Zurück