|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Oct 2006
Messaggi: 385
|
[C] help su algoritmi stabili di ordinamento
salve
avendo una struttura del genere struct alunno { char cognome[20]; int voto; }; come dovrei realizzare un algoritmo di ordinamento stabile che ottenga partendo da rossi 6 verdi 6 leopardi 6 foscolo 7 bianchi 7 napoleone 5 ottenga ordinando per voto (in maniera che risultino ordinati anche i cognomi e non solo i voti ) napoleone 5 leopardi 6 rossi 6 verdi 6 bianchi 7 foscolo 7 e lo stesso ordinando per nome tutti gli esempi di algoritmi di ordinamento che ho trovato hanno esempi solo per array con un solo valore non per strutture quindi con più valori da ordinare |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: May 2004
Città: Londra (Torino)
Messaggi: 3692
|
Ciao. Una nota, non stai cercando un algoritmo stabile di ordinamento.
Un algoritmo di ordinamento ha come input un criterio di ordinamento, che ritorna una relazione d'ordine (maggiore, minore, uguale) tra 2 elementi. Tipicamente una funzione che restituisce quindi rispettivamente un valore >0, <0 oppure 0. Quando ci sono piu' elementi che restituiscono "UGUALE", allora un algoritmo stabile prevede che gli elementi "uguali" vengano restituti nell'ordine originale della lista di partenza. Un algoritmo instabile (ES: qsort) puo' restituire gli elementi "uguali" in ordine casuale. Ordinando per voto con algoritmo stabile, tu avresti ottenuto foscolo 7 bianchi 7 rossi 6 verdi 6 leopardi 6 napoleone 5 Quello che stai cercando e' invece un algoritmo di ordinamento normale, con una chiave doppia invece che singola. E' sufficiente scrivere la funzione che restituisce la relazione d'ordine che faccia uso di entrambi i campi. qualcosa tipo int ret; ret=voto1- voto2; if (ret==0) ret=CompareTo(nome1, nome2); return ret; Fra l'altro, l'algoritmo di ordinamento ORDER BY dei Database commerciali e' instabile...
__________________
Se pensi che il tuo codice sia troppo complesso da capire senza commenti, e' segno che molto probabilmente il tuo codice e' semplicemente mal scritto. E se pensi di avere bisogno di un nuovo commento, significa che ti manca almeno un test. Ultima modifica di gugoXX : 16-05-2008 alle 12:14. |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 06:10.



















