Sort



  • Hi Leute,

    Ich brauche Hilfe!!!

    Ich habe eine Structur:

    typedef struct instr {
    
       int pos;
       int value;
    }
    

    Ich habe ein "value", und seine position in einer Tabelle.

    Ich muss diese "value" sortieren, aber anhand von Positionen:

    z.B:
    Quelle:

    pos : 4, 15, 9, 2,
    value: 55665, 78293, 89345, 23456

    Source
    pos: 2, 4, 9, 15
    value: 23456 55665 89345 78293

    Welchen Sortierungsverfahren kann Ich benutzen.

    Ich habe quicksort "qsort" benutzt, aber er sortiert, zusammen mit position, auch die Werte.

    Im Voraus Vielen Dank



  • fanbjs schrieb:

    Ich habe quicksort "qsort" benutzt, aber er sortiert, zusammen mit position, auch die Werte.

    Bitte was? Du willst du Strukturen anhand von value sortieren. Das geht mit dem qsort() aus der stdlib.h wunderbar. Was genau ist dein Problem?



  • Vielen Dank für den Antwort.

    Ich muss aber die Werte anhand Position sortieren.

    Z.B.

    Original:

    pos: 8, 57, 43, 23, 2, 0,

    wert, 34567, 45678, 4648, 35378, 78393, 53467

    Ziel:

    pos: 0, 2, 8, 23, 43, 57,

    wert, 53467, 78393, 34567, 35378, 4648, 45678

    Ich habe ein Array, wo jedes Element, eine Structur hat:

    {value =, pos =}
    

    Zum. Beispiel: Array: instr *SortSet;

    Ich gebe in den

    qsort (SortSet, entries, sizeof(instr), compare);
    

    wobei

    SortSet
    

    - array mit solchen Elementen ist,

    entries
    

    - Anzhal von Elementen in Array,

    compare
    

    - Methode zum vergleichen.

    instr
    

    - Typ von array (structure)

    uintst_t compare(const void *p1, const void *p2)
    {  
    //used by qsort
    	uint32_t i1 = *(uint32_t *)p1;
      uint32_t i2 = *(uint32_t *)p2;
    	if (i1 >  i2) return 1;
    	else if (i1 < i2) return -1;
      else return 0; //shouldnt happen here!
    }
    

    Der qsort, sortiert aber gleichzeitig Positionen, und Werte, das heist,
    dass wert jetz die falsche Positionen haben.

    Wie kann Ich nur Positionen sortieren, die aber ihre eigene Werten behalten.

    Vielen Dank im Voraus

    Lena



  • Indem du deine Vergleichsfunktion so anpasst, daß sie nur die Positionen vergleicht:

    int compare_pos(const void*p1,const void*p2)
    {
      instr* i1=(instr*)p1;
      instr* i2=(instr*)p2;
      return i2->pos-i1->pos;
    }
    
    ...
    qsort(SortSet,entries,sizeof(instr),compare_pos);
    ...
    


  • Hi

    Vielen , Vielen, Vielen Dank!!!!!!!!!!!!!!!!!!!!!!!!!

    Das hat mir sehr geholgen.

    Viele Grüsse

    Lena


Anmelden zum Antworten