Este algoritmo es de los más básicos en cuanto a ordenación se refiere, y toma ese nombre por la forma grafíca en la ordena los datos:
En el siguiente ejemplo usare un vector de forma grafíca y se visualizaran los indices y sus valores.
En la imagen de la izquierda se visualiza el vector con los valores iniciales y a continuacion el pseudocodigo sería:
leer_datos()
para i = 1 hasta total_datos - 1 hacer
para j = i+1 hasta total_datos hacer
si datos[i] > datos[j] entonces
temp = datos[i]
datos[i] = datos[j]
datos[j] = temp
fin-si
fin-para
fin-para
imprime_datos()
En pocas palabras toma el elemento que este en la posicion 1 y lo compara con los demas elemento hasta encontrar un elemento menor, lo intercambia, y así sucesivamente.
Este algoritmo esta catalogado como un algoritmo de complejidad n^n, y se le conoce así por la cantidad de ciclos anidados.
Algunas veces pueden haber optimizaciones con respecto a algunos casos de prueba, por ejemplo: Que pasaría si al primer intercambio de valores estos quedan ordenados?, se tendría que romper los ciclos, así que como un metodo de optimizacion colocar una bandera sería lo más viable para no hacer ciclos de más ejemplo:
leer_datos()
bandera = 1
para i = 1 hasta total_datos - 1 y bandera = 1 hacer
bandera = 0
para j = i+1 hasta total_datos hacer
si datos[i] > datos[j] entonces
temp = datos[i]
datos[i] = datos[j]
datos[j] = temp
bandera = 1
fin-si
fin-para
fin-para
imprime_datos()
En este caso bandera nos sirve para indicar cuando se ha realizado algún cambio, de lo contrario la ordenación habra terminado. A continuación el codigo de este algoritmo en C:
#include
int datos[100];
int i, j, temp, dat;
int main(){
scanf("%d",&temp);
for(i=0 ; i
if(datos[i] > datos[j]){
dat = datos[i];
datos[i] = datos[j];
datos[j] = dat;
}
}
}
for(i=0 ; i
}
Y con la bandera:
#include
int datos[100];
int i, j, temp, dat, bandera;
int main(){
scanf("%d",&temp);
for(i=0 ; i
for(j=i+1 ; j
bandera = 1;
dat = datos[i];
datos[i] = datos[j];
datos[j] = dat;
}
}
}
for(i=0 ; i
}