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. KriteriumKriterien 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,egalDaraufhin 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,3Ich hoffe, ich konnte dir behilflich sein...