|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Junior Member
Iscritto dal: Feb 2006
Messaggi: 11
|
[C] ordinamento array con indici
ciao, avrei un problemino con l'ordinamento degli array...
in pratica dopo averlo ordinato ad esempio con la funzione qsort, vorrei tenere traccia dei vecchi indici degli elementi...in pratica avendo un array[6] così definito: indici 0 1 2 3 4 5 valori 5 6 2 3 2 4 chiamo qsort() che me li ordina in questo modo: indici 0 1 2 3 4 5 valori 2 2 3 4 5 6 mentre io vorrei ottenere una cosa simile indici 2 4 3 5 0 1 valori 2 2 3 4 5 6 secondo voi come potrei fare ? |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Potresti passare alla qsort un array di strutture, nella struttura metti la coppia indice/numero e poi adatti il comparator alla nuova struttura
|
|
|
|
|
|
#3 |
|
Junior Member
Iscritto dal: Feb 2006
Messaggi: 11
|
e in pratica come si farebbe ?
se ho capito bene definisco una cosa del genere Codice:
typedef struct{
int indice;
int valore;
} array;
array *R;
qsort(R, sizeof(R), cmp);
|
|
|
|
|
|
#4 |
|
Senior Member
Iscritto dal: Nov 2005
Messaggi: 2788
|
Allora, per chiarezza la struttura la chiamerei "elemento" o qualcosa del genere. Poi la sizeOf la richiami su "elemento" e infine alla qsort devi passare non un riferimento a un elemento ma il riferimento ad un array di questi.
Detto questo, la cmp dovresti averla già fatta quando hai fatto l'ordinamento normale, devi solo modificarla un po' del tipo: Codice:
int compare (const void * a, const void * b)
{
return ( (*(elemento*)a).valore - (*(int*)b).valore );
}
|
|
|
|
|
|
#5 |
|
Junior Member
Iscritto dal: Feb 2006
Messaggi: 11
|
grazie mille....sei un genio
ci stavo sbattendo la testa per ore, mentre tu me lo risolvi in 5 secondi... provo subito a vedere se funge |
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 07:44.



















