Este documento compara los algoritmos de ordenamiento por inserción directa e inserción binaria. La inserción binaria mejora la inserción directa realizando una búsqueda binaria en lugar de secuencial para encontrar la posición de inserción de un elemento. Ambos algoritmos tienen un tiempo de ejecución de Ω(n) en el mejor caso y O(n2) en el peor caso, pero la inserción binaria reduce aproximadamente el número de intercambios en un 25%. El documento también incluye pseudocódigo de ambos algoritmos.
1. Universidad Autónoma
de Baja California
Algoritmos y Estructuras
de Datos
Integrantes
Duran Rodriguez Mayra
Lopez Maldonado Victor
Tona Castro Claudia
16 de Mayo del 2016
Inserción Directa
e
Inserción Binaria
Inserción Binaria
Link de la página
ordenacionbinaria.jimdo.com
Este método de ordenamiento es una
mejora del método de ordenación
por inserción directa.
La mejora consiste en realizar una bús-
queda binaria en lugar de una búsque-
da secuencial, para insertar el elemento
en la posición que le corresponde.
Origen
Debido a que el algoritmo cuenta con
una licencia de código abierto MIT/X11
se puede deducir que el algoritmo se
originó en el Instituto de Tecnología de
Massachusetts (MIT).
Características
El número de intercambios se re-
duce un 25 % aproximadamente.
La secuencia de destino donde se
inserta el nuevo elemento ya de-
be de estar ordenada.
Búsqueda Binaria para localizar el
lugar de inserción.
Tiempo de Ejecución
En el mejor de los casos, el arreglo esta-
rá inicialmente ordenado.
F(n) = Ω(nLogn)
En el peor de los casos, el arreglo estará in-
versamente ordenado .
F(n) = O(n2
)
En cualquier otro caso, el número de compa-
raciones y el número de asignaciones es de
orden cuadrático.
F(n) = θ (n2
)
/*Inserción Binaria*/
void insercionBinaria(int vector[], int n)
{ for (k=1; k<n; k++)
{ aux = vector[k];
primero = 0;
ultimo = k-1;
/*búsqueda binaria de la posición
de inserción*/
while (primeri <= ultimo)
{ central = (int)((primero+ ultimo)/2);
if (aux <= vector[central])
ultimo = central – 1;
else
primero = central + 1;
}
/*desplazamos a la derecha los
elementos ordenados para insertar el
nuevo*/
for (i=k-1; i>=primero; i--)
{ v[i+1] = vector[i];
}
v[primero] = aux;
}
}
Código
2. Este algoritmo es una manera muy
natural de ordenar para un ser hu-
mano se basa en hacer comparacio-
nes.
Consiste en recorrer todo el arreglo
comenzando desde el segundo ele-
mento hasta el final.
Origen
No se tiene un origen en específico o
más bien no se atribuye su descubri-
miento a alguien, puesto que desde la
existencia de las computadoras casi
cualquier persona que pudiera tener
alcance a ellas, pudo haber implemen-
tado el método de inserción directa.
Características
Funcionamiento sencillo.
Estabilidad.
No intercambia registros con
claves iguales.
Una variable adicional para rea-
lizar los intercambios.
Código
Inserción Directa
/*Inserción Directa*/
void insercion(int vector[], int array_size)
{
int i, a, aux;
for (i =1; i < array_size; i++)
{ aux = vector[i];
a = i-1;
while (a >= 0 && vector[a] > aux)
{
vector[a + 1] = vector[a];
a--;
}
vector[a+1] = aux;
}
}
Tiempo de Ejecución
En el mejor de los casos, el arreglo estará ini-
cialmente ordenado.
F(n) = Ω(n)
En el peor de los casos, el arreglo estará inver-
samente ordenado .
F(n) = O(n2
)
En cualquier otro caso:
cuanto más ordenada esté ini-
cialmente más se acerca a
F(n)=O(n)
cuanto más desordenada, más se
acerca a
F(n) = θ (n2
).