HI, ich habe eben ne Sortierungsroutine ohne Irgend eine Vorlage geschrieben, ich weiss nicht ein mal von Welcher Art die Sortierung ist, also wie sie heißen möge :-(
Sie Sortiert eine Datensatzliste (mit 3 String-Variablen pro Eintrag), nach dem Alphabet. Es ist eine Halbe Dynamische Liste oder sowas. Das ist so per malloc wird der Datensatz erstellt und die Adresse in Eine Pointerliste mit Maximal 10K Einträgen eingetragen. Diese Pointerliste wird dann umsortiert, je nachdem welche Daten sich im Block zu den jeweilgen Pointer in der Liste befindet.
Hier der Komplette Source:
Ich denke Eigentlich das die Sortiergeschwindigkeit für meine Zwecke austreichend ist, zumal später zu jeden Eintrag eine HTML-Datei gehören wird, die Ausgelesen werden muss, das wird wohl die meiste Zeit in Anspruch nehmen.
Aber überpfüft mal und gebt ggf. Ratschläge, dazu habe ich ja das Thema eröffnet
Sie Sortiert eine Datensatzliste (mit 3 String-Variablen pro Eintrag), nach dem Alphabet. Es ist eine Halbe Dynamische Liste oder sowas. Das ist so per malloc wird der Datensatz erstellt und die Adresse in Eine Pointerliste mit Maximal 10K Einträgen eingetragen. Diese Pointerliste wird dann umsortiert, je nachdem welche Daten sich im Block zu den jeweilgen Pointer in der Liste befindet.
Hier der Komplette Source:
Code:
#include<stdio.h>
#include<string.h>
#include<windows.h>
//Maximale Eintraganzahl
#define MAXEINTRAEGE (10000)
//Einträge die Hinzugefügt werden sollen
#define ADDANZAHL (2000)
#define DABes Zaehler.daten->Beschreibung
#define DATitel Zaehler.daten->Titel
#define DADatei Zaehler.daten->Datei
struct Daten{
TCHAR Datei[100];
TCHAR Titel[200];
TCHAR Beschreibung[300];};
struct Zaehler{
int pos;
int anzahl;
struct Daten *daten;};
struct Zaehler Zaehler;
TCHAR *Liste[MAXEINTRAEGE];
int AddItem(const TCHAR *Datei,const TCHAR *Titel,const TCHAR *Beschreibung){
struct Daten *adr;
int ok;
ok = FALSE;
if (Zaehler.anzahl < MAXEINTRAEGE)
{
adr = (struct Daten *) malloc(sizeof(struct Daten));
if (adr > 0)
{
memset(adr,0,sizeof(struct Daten));
Zaehler.anzahl++;
Zaehler.pos = Zaehler.anzahl;
Zaehler.daten = adr;
ok = TRUE;
Liste[Zaehler.anzahl] = (TCHAR *) adr;
strcpy(DADatei,
Datei);
strcpy(DATitel,
Titel);
strcpy(DABes,
Beschreibung);
}
}
return (ok);
}
int GotoItem(int nr){
if ((nr <= Zaehler.anzahl) && (nr >= 1))
{
Zaehler.pos = nr;
Zaehler.daten = (struct Daten *) Liste[nr];
nr = TRUE;
}
else
{nr = FALSE;}
return(nr);
}
int NextItem(void){
int nr=Zaehler.pos;
nr++;
return (GotoItem(nr));}
int PrevItem(void){
int nr=Zaehler.pos;
nr--;
return (GotoItem(nr));}
void PrintItem(void){
printf("Titel : '%s'\n"
"Beschreibung: '%s'\n"
"Datei : '%s'\n"
,DATitel,DABes,DADatei);}
// Hier die Sortierung-Routine
void sort(void){
struct Daten *vgl1,*vgl2;
int z;
int Fertig;
do{
Fertig=TRUE;
for(z=Zaehler.anzahl;z>1;z--)
{
vgl1 = (struct Daten *) Liste[z];
vgl2 = (struct Daten *) Liste[z-1];
if (strcmp(vgl1->Titel,vgl2->Titel)<0)
{
Liste[z] = Liste[z-1];
Liste[z-1] = (TCHAR *) vgl1;
Fertig = FALSE;
}
}
} while(Fertig==FALSE);
}
int main(void){
int z;
TCHAR Titel[100];
TCHAR Datei[100];
TCHAR Bez[100];
Zaehler.anzahl = 0;
for(z=1;z<ADDANZAHL;z++){
sprintf(Titel,"Titel %i Nr %i",z%30,z);
sprintf(Datei,"Datei Nr %i",z);
sprintf(Bez ,"Bezeichnung Nr %i",z);
if (AddItem(Datei,Titel,Bez)==TRUE){
//printf("Eintrag %i hinzugefuegt!!\n",Zaehler.anzahl);
};
}
GotoItem(1);
//do{PrintItem();}while(NextItem());
printf("Sortierung gestartet ...\n");
sort();
printf("Sortiert\n");
GotoItem(ADDANZAHL-100);
do{PrintItem();}while(NextItem());
return(0);}
Ich denke Eigentlich das die Sortiergeschwindigkeit für meine Zwecke austreichend ist, zumal später zu jeden Eintrag eine HTML-Datei gehören wird, die Ausgelesen werden muss, das wird wohl die meiste Zeit in Anspruch nehmen.
Aber überpfüft mal und gebt ggf. Ratschläge, dazu habe ich ja das Thema eröffnet