PDA

View Full Version : [C] ordinamento array con indici


pollo86
21-03-2008, 11:43
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 ?

wingman87
21-03-2008, 11:46
Potresti passare alla qsort un array di strutture, nella struttura metti la coppia indice/numero e poi adatti il comparator alla nuova struttura

pollo86
21-03-2008, 11:59
e in pratica come si farebbe ?

se ho capito bene definisco una cosa del genere



typedef struct{

int indice;
int valore;

} array;

array *R;

qsort(R, sizeof(R), cmp);



ma come faccio ad ordinarli per valori ? E la funzione comparativa come la dovrei definire ?

wingman87
21-03-2008, 12:12
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:
int compare (const void * a, const void * b)
{
return ( (*(elemento*)a).valore - (*(int*)b).valore );
}
Su quest'ultimo non sono sicuro perché è un bel po' che non uso C e non ricordo se posso usare il punto "." o se devo usare le frecce "->". Comunque il ragionamento è questo... :p

pollo86
21-03-2008, 12:46
grazie mille....sei un genio

ci stavo sbattendo la testa per ore, mentre tu me lo risolvi in 5 secondi...:muro:

provo subito a vedere se funge :p