Professional Documents
Culture Documents
Comparación: El algoritmo tiene que poder indicar, dados dos datos cualesquiera, si
están en orden o no.
Intercambio: El algoritmo tiene que ser capaz de intercambiar dos elementos en el
conjunto de datos.
Con respecto a la comparación, es necesario tener un criterio, ya que es frecuente que una
misma lista de datos sea susceptible de ser ordenada por distintos criterios. Cada aplicación del
algoritmo se hace con un único criterio.
El intercambio implica que los datos están almacenados en una estructura de datos que nos
permite obtener un dato y escribirlo en una posición concreta. La lectura y escritura deben
poder realizarse con un coste constante, o sea, el tiempo que se tarda en leer o escribir el dato
no debe depender de la cantidad de elementos que estemos intentando ordenar. La estructura
preferida para esto es el array (arreglo o vector).
Complejidad
La ventaja principal del ordenamiento de burbuja es que es muy popular y fácil de implementar.
La principal desventaja del ordenamiento de burbuja es el hecho de que no se comporta
adecuadamente con una lista que contenga un número grande de elementos. Esto se debe a
que este ordenamiento requiere n al cuadrado de pasos de procesamiento para cada n número
de elementos a ser ordenados. Como tal, este tipo de ordenamiento es más apropiado para la
enseñanza académica pero no para aplicaciones de la vida real.
int aux;
int[] vector = { 50, 20, 40, 80, 30 };
for (int i = vector.Length - 1; i > 0; i--)
{
for (int j = 0; j < i; j++)
{
if (vector[j] > vector[j + 1])
{
aux = vector[j];
vector[j] = vector[j + 1];
vector[j + 1] = aux;
}
}
}
for (int i = 0; i < vector.Length; i++)
{
Console.WriteLine(vector[i]);
}
Console.ReadLine();
Su principal ventaja es la eficiencia, ya que puede tratar con una enorme lista de elementos.
Su desventaja, es que su rendimiento (en el peor de los casos) es similar al promedio del
burbujeo, inserción o selección.
Selección Directa
El ordenamiento por selección funciona pasando repetidamente por la lista de elementos, cada
vez seleccionando un elemento según su ordenamiento y colocándolo en la posición correcta
en la secuencia, con respecto a lo que ya está ordenado.
int[] vector = { 6, 5, 3, 1, 8, 7, 2, 4 };
for (int i = 0; i < vector.Length - 1; i++)
{
int posicionMinimo = i;
for (int j = i + 1; j < vector.Length; j++)
{
if (vector[j] < vector[posicionMinimo])
{
posicionMinimo = j;
}
}
if (i != posicionMinimo)
{
int iaux = vector[i];
vector[i] = vector[posicionMinimo];
vector[posicionMinimo] = iaux;
}
}
for (int i = 0; i < vector.Length; i++)
{
Console.WriteLine(vector[i]);
}
Console.ReadLine();
La principal ventaja de este tipo de ordenamiento es que funciona bien con una lista pequeña.
La principal desventaja es su poca eficiencia cuando se trata con una enorme lista de elementos.
Inserción Directa
El bucle principal de la ordenación por inserción va examinando sucesivamente todos los
elementos de la matriz desde el segundo hasta el n-ésimo, e inserta cada uno en el lugar
adecuado entre sus predecesores ordenados dentro de la matriz.
int[] vector = { 6, 5, 3, 1, 8, 7, 2, 4 };
for (int i = 1; i < vector.Length; i++)
{
int valor = vector[i];
int j = i - 1;
while (j >= 0 && vector[j] > valor)
{
vector[j + 1] = vector[j];
j--;
}
vector[j + 1] = valor;
}
for (int i = 0; i < vector.Length; i++)
{
Console.WriteLine(vector[i]);
}
Console.ReadLine();
ALGORITMOS DE BUSQUEDA
Con mucha frecuencia los programadores trabajan con grandes cantidades de datos
almacenados en arrays y registros, y por ello será necesario determinar si un array contiene un
valor que coincida con un cierto valor clave. El proceso de encontrar un elemento específico de
un array se denomina búsqueda.
Búsqueda secuencial
La búsqueda secuencial busca un elemento de una lista utilizando un valor destino llamado
clave. En una búsqueda secuencial (a veces llamada búsqueda lineal), los elementos de una lista
o vector se exploran (se examinan) en secuencia, uno después de otro.
El algoritmo de búsqueda secuencial compara cada elemento del array con la clave de búsqueda.
Dado que el array no está en un orden prefijado, es probable que el elemento a buscar pueda
ser el primer elemento, el último elemento o cualquier otro. De promedio, al menos el programa
tendrá que comparar la clave de búsqueda con la mitad de los elementos del array. El método
de búsqueda lineal funcionará bien con arrays pequeños o no ordenados. La eficiencia de la
búsqueda secuencial es pobre, tiene complejidad lineal, O(n).
Búsqueda binaria
La búsqueda secuencial se aplica a cualquier lista. Si la lista está ordenada, la búsqueda binaria
proporciona una técnica de búsqueda mejorada. Una búsqueda binaria típica es la búsqueda de
una palabra en un diccionario. Dada la palabra, se abre el libro cerca del principio, del centro o
del final dependiendo de la primera letra del primer apellido o de la palabra que busca. Se puede
tener suerte y acertar con la página correcta; pero, normalmente, no será así y se mueve el
lector a la página anterior o posterior del libro.