PDA

Visualizza la versione completa : [Algoritmo]Swap


Luc@s
16-03-2003, 12:21
Ho il seguente cod come implementazione del bubble sort:


// Dikiaro il prot. della funzione di confronto
int confronta(int x, int y)
{
// questa funzione da risultati decrescenti. Ŕ booleana e quindi
// i rest 1 x vero o 0 x falso
return(x < y);
}

void sort(int vettore[]; const int dim)
{
//Itera n volete per essere sicuro che il vettore sia ordinato
for(int i = 0; i < dim; i++)
{
//Iniziando da un'estremitÓ del vettore, confronta a coppie
// gli elementi del vettore e crea localmente il giusto ordine
for(int j = 0; j < dim; j++)
{
if(confronta(vettore[j], vettore[j+1]))
{
swap(vettore[j], vettore[i]);
}
}
}
}


Ma swap ................. come funzia?


Tnk

lelefante
16-03-2003, 12:51
swap significa cambio di posto...
in generale puo' essere una cosa cosi':


void swap(int a, int b) {
int tmp = a;
a = b;
b = tmp;
}

Solo che cosi' facendo lo scambio avviene tra due variabili locali, e quindi inutile all'esterno.

In C/C++ si possono passare gli indirizzi delle variabili e scambiare i contenuti, oppure passi l'indirizzo del vettore e i due indici. In C# non saprei proprio, ma immagino ci sia qualcosa di simile.

Luc@s
16-03-2003, 12:57
potrei usare i puntatori in C#................ma servirebbe?

l.golinelli
16-03-2003, 13:12
Se vuoi invertire i valori della variabili stesse sei obbligato a lavorare sugli indirizzi come ha detto lelefante...



void swap(int *a, int *b)
{
int tmp = *a;
*a = *b;
*b = tmp;
}


:ciauz:

akiross
16-03-2003, 17:05
int vettore[]; const int dim

un puntoevirgola di troppo ??
si comunque swap la puoi fare anche senza puntatori, e usando i template, cosi' usi una sola funzione:


template <class type>
void swap(type &a, type &b)
{
type tmp = a;
a = b;
b = a;
}



questo pero' crea problemi se scabi 2 classi che usano la memoria dinamica.
perche' viene richiamato il distruttore di tmp, che distrugge la memoria.
Dovresti ridefinire l'operatore = per non creare problemi.

Comunque, questa la puoi usare con tutti i tipi standard, senza problemi

ciauz

Loading