Sortier Algorithmus für das Sortieren der Nachnamen
-
Hallo an alle die sich mit C schon etwas länger beschäftigen als ich.
Ich habe bei uns an der Hochschule das Wahlpflichtfach Grundlagen der Programmierung in C belegt und stehe vor folgendem Problem:
Ich versuche verzweifelt ein Sortieralgorithmus zu erzeugen, der die eingegebenen Nachnamen z.B. nach Anfangsbuchstabe sortiert. Mein Quelltext sieht wie folgt aus:#include <stdio.h> #include <string.h> //Globale Datenstruktur struct person { char name[64]; char vorname[64]; int gehalt; }; struct person personen[128]; int akt_anz_personen = 0; void warten() { char zk[64]; printf("Weiter mit w: \n"); scanf("%s", zk); } void eingabe() { system("clear"); printf("Eingabe Der Daten\n"); if(akt_anz_personen < 120) { printf("Name: "); scanf("%s", personen[akt_anz_personen].name); printf("Vorname: "); scanf("%s", personen[akt_anz_personen].vorname); printf("Gehalt: "); scanf("%dx", &personen[akt_anz_personen].gehalt); akt_anz_personen = akt_anz_personen + 1; } else { printf("Speicher voll!\n"); warten(); } } void loeschen() { printf("Löschen\n"); warten(); } void ausgabe() { int i; system("clear"); printf("Ausgabe der Daten\n"); printf("Name:\t\tVorname:\tGehalt:\n"); for(i=0; i < akt_anz_personen; i=i+1) { printf("%s\t\t%s\t\t%d\n", personen[i].name, personen[i].vorname, personen[i].gehalt); } printf("\n"); warten(); } void sortieren() { printf("Sortieren\n"); warten(); } void speichern(){ FILE *fptr; int i; printf("Speichern...\n\n"); fptr = fopen("Daten.txt","w"); if(fptr != NULL) { for(i=0; i < akt_anz_personen; i=i+1) { fprintf(fptr,"%s\t%s\t%d\n", personen[i].name, personen[i].vorname, personen[i].gehalt); } fclose(fptr); } else { printf("Datei konnte nicht geöffnet werden!\n"); warten(); } printf("Speichern erfolgreich\n"); warten(); } void laden() { FILE *fptr; fptr = fopen("Daten.txt", "r"); if(fptr != NULL) { akt_anz_personen = 0; while(3==fscanf(fptr,"%s %s %d", personen[akt_anz_personen].name, personen[akt_anz_personen].vorname, &personen[akt_anz_personen].gehalt)){ akt_anz_personen = akt_anz_personen + 1; } fclose(fptr); } else { printf("Datei konnte nicht geöffnet werden!\n"); warten(); } } void beenden() { printf("Beenden\n"); warten(); } int main() { char op, w; do{ system("clear"); printf("\n"); printf("Adressenspeicher\n"); printf("================\n\n"); printf("E : Eingabe\n"); printf("L : Löschen\n\n"); printf("A : Ausgabe\n"); printf("S : Sortieren\n"); printf("Z : Speichern\n"); printf("Y : Laden\n\n"); printf("X : Beenden\n\n"); printf("Eingabe: "); scanf("%1s", &op); switch(op) { case 'e': case 'E': eingabe(); break; case 'l': case 'L': loeschen(); break; case 'a': case 'A': ausgabe(); break; case 's': case 'S': sortieren(); break; case 'z': case 'Z': speichern(); break; case 'y': case 'Y': laden(); break; case 'x': case 'X': beenden(); break; default: printf("Falsche Eingabe\n"); warten(); } } while((op != 'x')&&(op != 'X')); return(0); }
An der Stelle void sortieren() müsste mein Sortieralgorithmus rein.
Kann mir eventuell jemand den Quelltext zum Sortieren der Nachnamen nach dem Anfangsbuchstaben übermitteln? Ich weiß einfach nich mehr weiter... DANKE IM VORRAUS[edit by c.rackwitz: cpp-Tags ]
-
1. Bitte [cpp]-Tags verwenden.
2. Musst/Willst du einen eigenen Algorithmus implementieren?
ja: Such dir einen aus
nein: Nimm den man: qsort.
-
Danke erst mal für die Antwort, aber mit welchem Algorithmus bei Wikipedia kann ich meine Namen sortieren. Sehen mir alle schwer nach Algorithmen für's Zahlensortieren aus!?
-
Die Algorithmen können alles sortieren, du brauchst nur für Strings eine andere Vergleichsfunktion als für Zahlen.
Schau dir mal z.B. strcmp() an.
-
Ahhhhhhhhhhhh, jetzt weiß ich glaube ich worauf TactX hinaus will... Werd' ich mal probieren! :p