Discussione:Bubble sort
Lo XOR
Usare lo XOR nel C++ per scambiare dati è sconsigliato da qualunque manuale di buona programmazione: un compilatore ottimizzante fa meglio da solo. e poi esiste std::swap. Provvedo a modificare e metto qui il codice incriminato
template <class Type> void bubbleSort(Type *array, size_t length) { int i, j; for(i = length - 1; i > 0; i--) for(j = 0; j < i; j++) if(array[j] > array[j+1]) /* compara gli elementi vicini */ { array[j] ^= array[j+1]; // Usa XOR per scambiare i valori più velocemente, array[j+1] ^= array[j]; // ma solo quando sei sicuro array[j] ^= array[j+1]; // di poterlo fare (dipende dal tipo di dati) } } template<typename T> void bubble_sort(T *base, size_t n) { T *p, *q, t; while (n--) { for (q = (p = base) + 1; p < base + n; ++q, ++p) { (*p > *q) && (t = *p, *p = *q, *q = t); } } }
ERRORI ???
Credo che ci siano diversi errori in questo articolo, ma non sono in grado di fare una correzione globale, inoltre vorrei sentire qualche opinione (nel frattempo lo inserisco tra gli articoli da controllare). Credo che la descrizione dell'algoritmo sia errata (confrontare con la versione inglese per esempio, che invece ritengo corretta). Poi l'implementazione in C e in Basic sono differenti (IMHO è corretta quella in basic, mentre quella in C rispecchia la descrizione e quindi è anch'essa errata). Fortran e Java mi sembrano sostanzialmente corretti (forse con qualche piccolo bug). Sugli altri linguaggi non sono in grado di esprimermi. Che ne pensate? DanGarb 18:22, Lug 20, 2005 (CEST)