Sortieren einer Binär Datei
-
Hallo Leute,
ich habe folgendes Problem. Ich soll ein C-Programm schreiben dass eine Datei (Buecher.dat) einliest und dann wahlweise absteigend oder aufsteigend sortiert nach dem Gesamtpreis oder der Anzahl der bestellten Exemplare.
Nun, ich kenne da kaum eine Methode. Nur Bubblesort und damit komme ich auch nicht klar. Vielleicht kann mir einer von euch helfen. Das wäre echt super!
#include <stdio.h> #include <string.h> #include <stdlib.h> struct Buecher { char Besteller[21]; char KundenNr[11]; char Ort[11]; char KTitel[16]; char Autor[21]; char Verlag[21]; char ISBN[14]; short Anzahl; float Preis; }__attribute__ ((packed)) adr; int main() { int c; int count=0; FILE* Buech; char key; if ((Buech = fopen("Buecher.dat", "r")) == NULL) { printf("Datei konnte nicht geoeffnet werde.\n"); getchar(); exit(-1); } do{ printf("(B)eenden\n"); printf("(U)nsortiert Anzeigen\n"); key=getchar(); fflush(stdin); switch(key) { case 'U': while (fread(&adr, sizeof(adr),1, Buech) == 1) { printf("\nBesteller: \t%s", adr.Besteller); printf("\nKundenNr: \t%s", adr.KundenNr); printf("\nOrt: \t\t%s", adr.Ort); printf("\nKTitel: \t%s", adr.KTitel); printf("\nAutor: \t\t%s", adr.Autor); printf("\nVerlag: \t%s", adr.Verlag); printf("\nISBN: \t\t%s", adr.ISBN); printf("\nAnzahl: \t%d", adr.Anzahl); printf("\nPreis: \t\t%f\n", adr.Preis); getchar(); } } } while(key != 'B'); fclose(Buech); }
-
Hallo,
dann zieh dir das mal rein: http://www.sortieralgorithmen.de/
Schnuppertipps: Quicksort, Mergesort, ShellSort, Insertion Sort
Mfg
GPC
-
Also ich würde ja den einfachen Weg gehen und den qsort() aus der stdlib nehmen.
-
Ich werd mal den Link durchgehen. Hoffe ja das ich zurecht komm.
-
Hallo nochmal...
Leider komme ich überhaupt nicht zurecht. Das liegt wohl darin das C einfach nicht mein Ding ist. Könntet Ihr vielleicht weitere Anregungen geben?
-
Also ich würde ja den einfachen Weg gehen und den qsort() aus der stdlib nehmen.
-
Und wie baue ich das ein? Sorry für meine dummheit.
-
Du liesst alle Datensätze der Datei in ein Array (das natürlich ausreichend groß ist). z.B. mit fread().
Dann schreibst du eine Vergleichsfunktion wie sie der qsort() fordert. Diese übergibst du dann dem qsort() selbst welcher dann das array sortiert, und dann kannst du das Array wieder in die Datei schreiben.Nette Links:
http://www.die.net/doc/linux/man/man3/malloc.3.html
http://www.die.net/doc/linux/man/man3/qsort.3.html
http://c-faq.com/lib/qsort2.html
http://www.pronix.de/pronix-833.html (siehe 24.3.6 qsort() )PS: qsort() ist auch nicht ganz ohne, aber du ersparst dir das Implementieren eines eigenen Algos. Googlen für den qsort() wäre auch keine schlechte Idee. Ein Tutorial oder Buch sogar noch viel besser.
PPS: Mit Dummheit hat das nichts zu tun. Musst dich halt anstrengen.
-
Recht vielen Dank. Das werde ich morgen alles durcharbeiten. Ich denke es ist heute zu spät um noch was in meinen verwirrten Kopf zubekommen.
Ich werde dann mal mein Ergebniss posten.