struct nach elementen ordnen
-
So, da Code scheinbar König ist - ich habe das mal zusammengestrichen. Ich kann den Kram hier natürlich nicht testen, weil mir große Teile des Drumherums fehlen, also ist das mehr als Kladde zu verstehen. Ich bitte kleinere Fehler deshalb zu entschuldigen.
So etwa würde ich das anfangen:
#include <stdlib.h> int compare_strc_bsatz(void const *lhs_p, void const *rhs_p) { strc_bsatz const *lhs = (strc_bsatz const *)lhs_p; strc_bsatz const *rhs = (strc_bsatz const *)rhs_p; return datindex(lhs->data.datum) - datindex(rhs->data.datum); } void sortiere_buchungsdatei_chronologisch() { FILE *bdp; size_t anz_ds; size_t elem_read; strc_bsatz *data; bdp = fopen(dn_buchungen_bin,"rb"); if(bdp == NULL) return; fseek(bdp, -1 * (long) sizeof(strc_bsatz), SEEK_END); anz_ds = ftell(bdp) / sizeof(strc_bsatz); if(anz_ds <= 1) { fclose(bdp); return; } fseek(bdp, 0, SEEK_SET); data = malloc(sizeof(strc_bsatz) * anz_ds); if(data == NULL) return; elem_read = fread(data, sizeof(str_bsatz), anz_ds, bdp); fclose(bdp); if(elem_read == anz_ds) { qsort(data, elem_read, sizeof(strc_bsatz), compare_strc_bsatz); bdp = fopen(dn_buchungen_bin, "wb"); fwrite(data, sizeof(strc_bsatz), elem_read, bdp); fclose(bdp); } free(data); }
Was den Rest angeht: Bitte beruhige dich zunächst wieder; ich lasse mich nicht gern anschreien.
Speicherlecks sind kein Kavaliersdelikt. Als Programmierer muss man darauf gefasst sein, mal in Situationen zu geraten, in denen die eigenen Programme nicht nur 150 Kilobyte Daten verarbeiten müssen, nicht nur zehn Sekunden am Stück laufen und nicht nur auf PCs. Zumal dieser Thread nicht mit der Diskussion deines Programms, das vielleicht wirklich mit begrenzten Parametern zurechtkommt, begonnen hat. Allerdings: auch wenn in einem konkreten Fall die Anforderungen begrenzt sind, läuft heute auf einer Maschine nicht mehr nur ein Programm zur selben Zeit, und ich gebe zu bedenken, dass dein Programm gerade dann Speicher wegwirft, wenn dieser eh schon knapp ist. Auch zeigt die Erfahrung, dass Anforderungen im Laufe der Zeit mal wachsen können, und - sei ehrlich, bist du der Ansicht, dass du dich durch dieses Listengewurstel in zwei Jahren noch durchfinden wirst?
Übrigens sprachst du anfangs noch von 10000 Datensätzen, da sind wir schon in der Größenordnung von 100 Millionen Vergleichen. Mit Stringauseinanderklamüserei und Sprüngen in die Wallachei (das gibt cache-misses ohne Ende, soviel ist mal klar). Das ist ja das Problem bei quadratischer Skalierung - der Aufwand steigt schnell stark an.
-
Mit deiner Hardware bist du im Jahr 2012 angekommen.
Nur mit deinem Datenvolumen bist du in den 1980ern hängengeblieben.
-
alex2010 schrieb:
Und seit wann hat malloc() was mit der Rechenzeit zu tun?
Okay, jetzt bin ich überzeugt, dass wir es hier mit einem Troll zu tun haben.
-
seldon schrieb:
Okay, jetzt bin ich überzeugt, dass wir es hier mit einem Troll zu tun haben.
Schiebe nicht auf Trollerei, was sich auch befriedigend durch normale Dummheit erklären lässt.
-
seldon schrieb:
alex2010 schrieb:
Und seit wann hat malloc() was mit der Rechenzeit zu tun?
Okay, jetzt bin ich überzeugt, dass wir es hier mit einem Troll zu tun haben.
Ist klar.
Wenn wir malloc() nicht verwenden, ist der Rechner schneller.
Er frißt dann die Daten mit Überlichtgeschwindigkeit.
(LACH)
-
SeppJ schrieb:
seldon schrieb:
Okay, jetzt bin ich überzeugt, dass wir es hier mit einem Troll zu tun haben.
Schiebe nicht auf Trollerei, was sich auch befriedigend durch normale Dummheit erklären lässt.
Du bist Moderator, du Pfeife?
Also für mich war es das jetzt hier.
Und Tschüss
-
alex2010 schrieb:
SeppJ schrieb:
seldon schrieb:
Okay, jetzt bin ich überzeugt, dass wir es hier mit einem Troll zu tun haben.
Schiebe nicht auf Trollerei, was sich auch befriedigend durch normale Dummheit erklären lässt.
Du bist Moderator, du Pfeife?
Hmm, jemand wirft dir vor, dass du ein Arsch bist und ich verteidige dich, dass du einfach nur Unrecht hast. Hmm, da hatte ich wohl Unrecht.
Also für mich war es das jetzt hier.
Und Tschüss
Tja.
-
roflmao the three of you made my day!
-
alex2010 schrieb:
Und ja, sie ist quadratisch.
Na dann rechne dir doch mal aus, wieviel mehr an Daten du mit einem 1000-fach schnelleren Rechner bearbeiten könntest. Ziemlich enttäuschend, was? Ein besserer Algorithmus bringt dir hier ganz schnell mehr.