qsort in struktur



  • Hi Leute,

    Ich brauche Euere Hilfe,

    Ich habe solche Strukturen :

    typedef struct freq {
      long instr;
      long frequency;
      long pos;
    };
    
    typedef struct lut {
    
    	freq_t  *tab;
    	int clenght;
    	long entries;
    	long rest;
       long posComSize;
    	list_t *init;
       list_t *pointer;
    	list_t *pointer1;
       long *DeletArray;
       long pos;
    };
    

    Ich möchte in der Struktur

    lut*  Tables
    

    , alle Instruktionen nach ihren Positionen in

    freq *tab
    

    sortieren:

    Das Problem ist, Ich muss so eine Schleife habe, da jeder Element des Arrays

    lut *Tables
    

    , den Array

    freq *tab
    

    mit Struktur

    {instr, freqeuncy, pos}
    

    besitzt.

    for ( j =1; j <= count; j++){
    
             qsort(Tables[j].tab, Tables[j].entries ,sizeof(lut_t),compare_pos);
       }
    }  
    
    long compare_pos(const void*p1,const void*p2)
    {
    
    lut_t* i1=(lut_t*)p1;
    lut_t* i2=(lut_t*)p2;
       if (i1->pos > i2->pos) return 1;
       else if (i1->pos < i2->pos) return -1;
    }
    

    Wie kann Ich den compare_pos so anpassen, dass er in jedem Element der

    lut *Tables
    

    , in den

    freq *tab
    

    jede Instruktoin nach Ihrer Position sortiert.

    Im voraus Vielen Dank

    lena



  • Wenn du die Instruktionen eines lut_t sortieren willst, mußt du auch ein Vergleichskriterium für freq_t's bereitstellen

    int compare_freq(void* p1,void* p2)
    {
      freq_t* f1 = (freq_t*)p1;
      freq_t* f2 = (freq_t*)p2;
      return f2->pos - f1->pos;
    }
    
    for(i=0;i<tab_ct;++i)
      qsort(Tables[i].tab,Tables[i].entries,sizeof(freq_t),compare_freq);
    

Anmelden zum Antworten