Algoritmo di ordinamento Bubble Sort - Linguaggio C
Gli algoritmi di ordinamento nel linguaggio C vengono utilizzati per ordinare una serie di elementi all'interno di un array, solitamente numeri.
L'ordinamento può essere in ordine crescente, ovvero con i numeri ordinati dal più piccolo al più grande, oppure decrescente, ovvero con i numeri ordinati dal più grande al più piccolo.
L'ordinamento permette di gestire con più facilità un insieme di elementi e l'algoritmo più diffuso (e forse anche uno dei migliori da imparare) è l'algoritmo Bubble Sort.
La logica di questo algoritmo è quella di confrontare ogni elemento di un array (partendo dalla posizione 0), con il valore dell'elemento successivo, poi a seconda dell'ordinamento che si vuole realizzare tra decrescente e crescente, viene inserito in ultima posizione sempre l'elemento più piccolo della lista (decrescente) o più grande (crescente).
Ovviamente l'ultima posizione viene decrementata ogni volta che si arriva a posizionare un valore nell'ultima posizione di un array, altrimenti si sovrascrive continuamente l'ultimo elemento e non avviene alcun ordinamento!
Ecco un piccolo esempio per capire la logica di questo algoritmo di ordinamento bubblesort crescente:
CITAZIONE
ho il vettore vet[3] = {6,4,3,8}
Confronto vet[0] con vet[1] // 6 > 4 quindi inverto i due numeri nell'array e ottengo vet[3] = {4,6,3,8}
Confronto vet[1] con vet[2] // 6 > 3 quindi inverto i due numeri nell'array e ottengo vet[3] = {4,3,6,8}
Confronto vet[2] con vet[3] // 6 < 8 quindi i due numeri rimangono invariati nell'array.
Ora si decrementa l'ultima posizione, infatti non è più 3 dove è presente il valore 8, ma è 2 dove si presenta il valore 6 (questo perchè in ogni caso siamo già sicuri che l'elemento in ultima posizione è il numero maggiore della lista, invece il numero 6 è ordinato solo in questo caso).
Confronto vet[0] con vet[1] // 4 > 3 quindi inverto i due numeri nell'array e ottengo vet[3] = {3,4,6,8}
Confronto vet[1] con vet[2] // 3 < 6 quindi i due numeri rimangono invariati nell'array = {3,4,6,8}
Decremento l'ultima posizione e diventa 1.
Confronto vet[0] con vet[1] // 3 < 4 quindi i numeri rimangono invariati nell'array = {3,4,6,8}
Output: 3-4-6-8
Ora passiamo al codice, in questi due esempi vi mostrerò come realizzare un Bubble Sort crescente e uno decrescente
Ordinamento Bubble Sort crescente:
CODICE
void bubblesort(int v[], in
t n) {
int i,k;
int temp;
for(i = 0; i<n-1; i++) {
for(k = 0; k<n-1-i; k++) {
if(v[k] > v[k+1]) {
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
}
}
}
}
Ordinamento Bubble Sort decrescente
CODICE
void bubblesort(int v[], int n) {
int i,k;
int temp;
for(i = 0; i<n-1; i++) {
for(k = 0; k<n-1-i; k++) {
if(v[k] < v[k+1]) {
temp = v[k];
v[k] = v[k+1];
v[k+1] = temp;
}
}
}
}
ovviamente è anche possibile partire a fare i confronti dall'ultima posizione, sta a voi scegliere cosa preferire
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted
sono giaglonese
User deleted
User deleted
User deleted
User deleted
User deleted
User deleted