Struktur mit mehreren array sortieren



  • Hallo, wahrscheinlich ist das Problem gar nicht so schwer....
    ich habe eine Struktur

    struct slope{
    		double X[100];
    		double Y[100];
    		double Z[100];
    		double dist[100];
    		int index[100];
    		};
    

    diese will ich nun nach double Z sortieren. Wie geh ich das ganze an, das die entsprechenden Enträge in X Y dist und index mit sortiert werden.

    Hat da jemand ein Idee.
    Vielen Dank
    Andi



  • Dafür dürfte die Struktur erstmal nicht sonderlich geeignet sein. Besser wäre folgende Struktur:

    struct slope{
        double X;
        double Y;
        double Z;
        double dist;
        int index;
    };
    
    struct slope foo[100];
    

    Das Array übergibst du dann an man: qsort, neben einer selbstgeschriebenen Vergleichsfunktion (letzter Parameter). Google am besten mal nach Beispielen zu qsort.



  • Danke für den Tipp mit der Struktur,
    habs hinbekommen.

    Hier ein kleiner Besispielcode aus dem Netz

    #include <stdio.h>
    #include <stdlib.h>
    
    typedef int (*compfn)(const void*, const void*);
    
    struct coord { double X;
                    double Y;
    		double Z; 
    		long int num;
                  };
    
    struct coord array[10]  = { {  10.23,10.23,10.23,10    },
                                 {  5.23,5.23,5.23,5        },
                                 {  3.23,3.23,3.23,3     },
                                 {  4.23,4.23,4.23,4    },
                                 {  2.23,2.23,2.23,2    },
                                 {  6.23,6.23,6.23,6    },
                                 {  9.23,9.23,9.23,9    },
                                 {  8.23,8.23,8.23,8    },
                                 { 7.23,7.23,7.23,7    },
                                 {  1.23,1.23,1.23,1    }  };
    
    void printarray(void);
    int  compare(struct coord *, struct coord *);
    
    int main(void)
    {
       printf("List before sorting:\n");
       printarray();
    
       qsort(array,10,sizeof(struct coord),(compfn)compare );
       printf("\nList after sorting:\n");
       printarray();
    }
    
    int compare(struct coord *elem1, struct coord *elem2)
    {
       if ( elem1->Z < elem2->Z)
          return -1;
    
       else if (elem1->Z > elem2->Z)
          return 1;
    
       else
          return 0;
    }
    
    void printarray(void)
    {
       int i;
    
       for (i = 0; i < 10; i++)
          printf("%d:  Punkt X: %f  Y: %f Z: %f Index:%ld\n",
                   i+1, array[i].X,array[i].Y,array[i].Z, array[i].num);
    }
    

Log in to reply