Einfach verkettete Liste sortieren - nach 3 Kriterien



  • wie sortier ich eine liste von der jedes listenelement 3 werte hat ?
    zb 1 Elem(2,2,3) ;2Elem (2,1,3); 3Elem (2,1,2); 4 Elem (3,2,2) soll so sortiert werden -> (2,1,2)->(2,1,3)->(2,2,3)->(3,2,2)

    1ste Element sortieren ist kein Problem aber wie mach ich das wenn wie zb oben der 2er als erstes element steht und dann der 2te Wert zur Listensortierung herangenommen wird?? --> hab vorerst mal keinen Plan?

    also hier hab ich mal nach erstem Element sortiert und bei value2 weiß ich nicht mehr weiter wie ich das sortieren soll?

    void einfuegen (struct Node **pHead, int value, int value2){
        struct Node *ptr = NULL;
        struct Node *pCurr = NULL;
    
        ptr = (struct Node *)malloc(sizeof(struct Node));
        ptr->value = value;
        ptr->value2 = value2;
    
        if (*pHead == NULL){
            *pHead = ptr;
            ptr->pNext = NULL;
        }
        else if (value < (*pHead)->value){
            ptr->pNext = *pHead;
            *pHead = ptr;
        }
        else {
            pCurr = *pHead;
            while ((pCurr->pNext != NULL) && (pCurr->pNext->value < value) ){
                pCurr = pCurr->pNext;
            }
    
            if (pCurr->pNext != NULL) {
                ptr->pNext = pCurr->pNext;
                pCurr->pNext = ptr;
            }
            else {
                ptr->pNext = NULL;
                pCurr->pNext = ptr;
            }
        }
    }
    


  • ohne mich in dein code zu vertiefen, würde ich das folgendermaßen machen:

    1. Val ist das 1. Kriterium
    2. Val ist das 2. Kriterium
    ...
    N. Val ist das N. Kriterium

    Kriterien zum Sortieren versteht sich...

    also:
    sortiere nach dem 1. Kriterium: falls du beim Sortieren auf gleiche Zahlen triffst, dann schau dir das 2. Kriterium an und sortiere:

    also 1 Elem(2,2,3) ;2Elem (2,1,3); 3Elem (2,1,2); 4 Elem (3,2,2)

    2,?,? und 2,?,?
    Da die beiden Zahlen gleich sind, greift nun das 2. Kriterium zu:
    2,2,? und 2,1,?
    und sortiere dann:
    2,1,egal und 2,2,egal

    Daraufhin schaltest du wieder runter auf Gang 1(=Kriterium 1), bis du wieder auf 2 gleiche Zahlen stößt:
    2,1,3 und 2,2,3 sortiert
    2,1,2 muss noch sortiert werden
    Hier entscheidet das 3.Kriterium, also kommt 2,1,2 vor 2,1,3 vor 2,2,3

    Ich hoffe, ich konnte dir behilflich sein...


Anmelden zum Antworten