doomcalyptica
08-11-2005, 20:01
hallo, in meiner schzule haben wir das thema rekursion, sortieralgorithmen dran gehabt. den quicksort algorythmus haben wir mit delphi ausprobiert und nun wollte ich ihn mit C probieren (nur mal um einen okleinen benchmark zu bauen, um zu schauen was wohl schnelle r is ob delphi oder C) ... leider hat das programm bei C ein etwas seltsames laufzeitverhalten -> das array bleib hier nach dem aufruf von quicksort in main "unbeschrieben" ... ich vermute mal, das ich die sache mit den pointer in einem rekursiven aufruf einer funktion als argument nich anwenden darf.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
// 5 78 50 22 48
void quicksort(int ug, int og, int*feld) {
int pivot;
int rechts=og;
int links=ug;
int swap;
pivot=feld[og/2];
do {
while(feld[links]<=pivot)links++;
while(feld[rechts]>=pivot)rechts--;
if(links<rechts) {
swap=feld[links];
feld[links]=feld[rechts];
feld[rechts]=swap;
links++;
rechts--;
printf("debug\n");
}
} while (!(rechts<links));
if(links<og) quicksort(links,og,feld);
if(ug<rechts) quicksort(ug,rechts,feld);
}
int main() {
srand(time(0));
int i=0;
int feld[MAX];
for(i; i<MAX; i++)
printf("%d\n",feld[i]=rand()%100);
printf("\n");
quicksort(0,MAX-1,feld);
for(i=0; i<MAX; i++)
printf("%d\n",feld[i]);
return 0;
}
kann mir jemand helfen, oder besser, kann jemand bitte den fehler beseitigen ... ich weis bei dieser sache wirklich nicht weiter ...
ps: das prgramm lasst sich in der schule zwar ausführen, doch kommt bei der funktion quicksort es zu einem "segmentation fault"
wobei bei mir @ home quicksort erfolgreich aufgerufen wurde, dennoch "kryptische" für mich sinnlose zahlen (alle dieselben und im negativen bereich) im ganzen array auftreten.
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define MAX 10
// 5 78 50 22 48
void quicksort(int ug, int og, int*feld) {
int pivot;
int rechts=og;
int links=ug;
int swap;
pivot=feld[og/2];
do {
while(feld[links]<=pivot)links++;
while(feld[rechts]>=pivot)rechts--;
if(links<rechts) {
swap=feld[links];
feld[links]=feld[rechts];
feld[rechts]=swap;
links++;
rechts--;
printf("debug\n");
}
} while (!(rechts<links));
if(links<og) quicksort(links,og,feld);
if(ug<rechts) quicksort(ug,rechts,feld);
}
int main() {
srand(time(0));
int i=0;
int feld[MAX];
for(i; i<MAX; i++)
printf("%d\n",feld[i]=rand()%100);
printf("\n");
quicksort(0,MAX-1,feld);
for(i=0; i<MAX; i++)
printf("%d\n",feld[i]);
return 0;
}
kann mir jemand helfen, oder besser, kann jemand bitte den fehler beseitigen ... ich weis bei dieser sache wirklich nicht weiter ...
ps: das prgramm lasst sich in der schule zwar ausführen, doch kommt bei der funktion quicksort es zu einem "segmentation fault"
wobei bei mir @ home quicksort erfolgreich aufgerufen wurde, dennoch "kryptische" für mich sinnlose zahlen (alle dieselben und im negativen bereich) im ganzen array auftreten.