Struktur sortieren
-
Ich habe eine Strukture a la
strutre Werte{double X[600], Y[3][600]};
ich möchte diese mit qsort sortieren,
leider schaffe ich's trotz allem sortieren entweder nur quatsch auszugeben oder lediglich X zusortieren.
Ich würde aber gerne alle Spalten anch X sortieren.Hätte da jmd eine Idee oder Anregungen bzw Programmcode?
Danke
-
Schreib mal deinen Versuch in compilierbarer Form hin und benutze die Codetags.
-
Ich hab den Code zurück gesetzt ,sodass zumindest die erste spalte sortiert wird
struct Werte33 {double Hoehe[500], periodenlnge[3][500];} Werte; .... qsort((void*)&Werte,500,sizeof(double),compareH);
int compareH(const void * a,const void* b) { double delta = *(double*) b - *(double*) a; if (delta == 0.0) return 0; if (delta > 0.0) return 1; return -1; }
Ich hatte auch versucht die ganze struktur zu über geben ,sodass ich dann mittels punkt operator auf die einezelnen elemente zugreifen könnte hatte damit aber leider keinen erfolg
(alleine sizeof(struct Werthat bereits zu fehler geführt)
-
a und b in compareH sind natürlich vom Typ struct Werte33
Siehe auch http://www.c-plusplus.net/forum/279111?highlight=qsort
oder http://www.c-plusplus.net/forum/280012 (auf der letzten Seite)
-
Ups.
a und b sind Zeiger auf struct Werte33 und daher brauchst du auch den -> Operator.Steht aber auch in den genannten Links.
-
Ich habe mein Programm verändet habe aber noch immer kein Erfolg;
es wird der gesamte inhalt von meiner Werte liste über geben, aber er scheint die differenz nicht wie beabsichtigt bei ejden aufruf auszuführentypedef struct {double Hoehe[500];double periodenlnge[3][500];} Werte;
int MeanValues(int * Vx, int * Vy, int * P, int Anzahl,double * mean,char filename[]) Werte Werte; qsort((void*)Werte.Hoehe,500,sizeof(double*),compareH);
int compareH(const void *a,const void *b) { Werte p1=*(Werte*) a; Werte p2=*(Werte*)b; double delta = p2.Hoehe - p1.Hoehe; if (delta == 0.0) return 0; if (delta > 0.0) return 1; return -1; }
wäre für tipps dankbar
-
Wenn ich die Problemstellung richtig verstehe:
typedef struct { double hoehe; double periodenlaenge[3]; } wert; int compare_wert(void const *p, void const *q) { double delta = ((wert *) p)->hoehe - ((wert *) q)->hoehe; if(delta == 0.0) return 0; return delta < 0.0 ? -1 : 1; } /* ... */ wert w[500]; qsort(&w, 500, sizeof(wert), compare_wert);