2. Introducción
El propósito de la exposición es aprender como
funciona el método de ordenamiento inserción
directa. Empezaremos con una breve descripción
del método, un ejemplo, ventajas, aplicaciones, el
algoritmo y el código implementado.
3. Descripción del método (como funciona)
Los datos a clasificar son considerados uno a la
vez, cada elemento se inserta en la posición
apropiada con respecto al resto de los valores ya
ordenados.
El Algoritmo de Inserción Directa por la Izquierda o
derecha es un algoritmo de ordenamiento simple
en el cual la lista se va ordenando con una entrada
a la vez hacia la izquierda o derecha.
4. Ejemplo
Empezamos con los datos aleatoriamente ordenados, el primer dato lo
tomamos como la parte ordenada, el resto será la parte desordenada.
• Tomamos el primer número de la parte desordenada, en este caso
siempre es el segundo, la almacenamos en una variable temporal.
5. Se compara con el primer numero de la parte
ordenada.
• Si el numero es menor se recorre el arreglo y
se inserta el numero, si no fuera así se pone
el numero al final de la parte ordenada
6. Ventajas y aplicaciones
Fácil de Implementar
Eficiente en pocos datos
Eficiente en datos que ya tienen cierta tendencia al orden
Más eficiente en la práctica que otros algoritmos de ordenamiento de
tipo O(n2) porque su tiempo promedio es de n2/4 y es lineal en su mejor
caso
Estable (no cambia el orden relativo de los elementos iguales)
Es un algoritmo "en línea" (puede ordenar elementos conforme los
recibe).
Aunque este algoritmo tiene un mejor orden de complejidad que el
de burbuja, es muy ineficiente al compararlo con otros algoritmos
como quicksort.
Es el método mas sencillo de programar, no requiere espacio extra.
El método de ordenación por inserción directa es el que generalmente
utilizan los jugadores de cartas cuando ordenan éstas, de ahí que
también se conozca con el nombre de método de la baraja.
7. Algoritmo y pseudocódigo
void InsercionDirecta (int arreglo[], int tam)
insercion(A,Ndatos)
{
Inicio
int i , j , valorBusqueda;
Declarar i, k, aux: enteros
for(i = 1; i < tam; i++) Para i =1 hasta Ndatos haga
{ Aux = A[i]
valorBusqueda = a[i]; Para k =i-1Mientras Que ((k>=1) y
for (j = i - 1; j >= 0 && a[j] > valorBusqueda; j-- (aux<A[k])) haga
) A[k+1] = A[k]
{ k = k -1
a[j + 1] = a[j]; Fin MQ
}
A[k+1] = aux
Fin para
a[j + 1] = valorBusqueda;
Fin
}
val = a[i];
}
8. void InsercionDirecta (int a[], int tam)
{
int i, j, k,val=0,itera=0; Código implementado
for(i = 1; i < tam; i++)
{
clrscr();
for(k=0;k<tam;k++)
{
printf(" %d",a[k]);
}
val = a[i]; itera++;
printf(" Valor= %d n Iteracion=%d",val,itera); getch();
for (j = i - 1; j >= 0 && a[j] > val; j--)
{
a[j + 1] = a[j];
}
a[j + 1] = val;
}
clrscr();
itera++;
for(k=0;k<tam;k++)
{
printf(" %d",a[k]);
}
val = a[i];
printf(" Valor= %d n Iteracion=%d",val,itera); getch(); }
void main()
{ int a[10]={9,6,4,3,8,10,7,2,5,1};
int tam=20;
clrscr();
InsercionDirecta(a,tam); getch(); }
9. Bibliografía
Hector Enrique Guerrero C.(2009).La culpa es del
Programmer.
Donald Ervin K. (2002)Clasificación y búsqueda .
Reverte.
10. Ventajas y aplicaciones Créditos: Universidad Autónoma de Baja
California
• Fácil de Implementar • Pagina Web:
• Eficiente en pocos datos,
también en datos que ya
tienen cierta tendencia al • http://algorit-prog.es.tl/ Algoritmos y Estructura de
orden Datos
• Estable (no cambia el • Equipo:
orden relativo de los
elementos iguales)
• Juan Pablo Valenzuela Método de Inserción Directa
• Es un algoritmo "en
línea" (puede ordenar Ayala
elementos conforme los • Abel Perez Ureña
recibe).
• Es el que generalmente
utilizan los jugadores de
cartas cuando ordenan Bibliografía
éstas, de ahí que
•Hector Enrique Guerrero
también se conozca con
el nombre de método de
C.(2009).La culpa es del
la baraja. Programmer.
•Donald Ervin K.
• El orden del método es (2002)Clasificación y
cuadrático O(n2) búsqueda . Reverte.
11. Tomamos el primer número
Inserción directa
de la parte desordenada, en
este caso siempre es el
segundo, la almacenamos Código en C:
en una variable temporal.
Los datos a clasificar son Void insercionDirecta (int
considerados uno a la arreglo[],int tam)
vez, cada elemento se {
inserta en la posición int i,j,val;
apropiada con respecto Se compara con el for(i=1;i<tam;i++)
al resto de los valores ya primer numero de la {
ordenados. parte ordenada. val=a[i];
for(j=i-1;
Ejemplo
j>=0&& a[j]> val; j--)
Empezamos con los {
a[j+1]=a[j];
datos aleatoriamente
}
ordenados, el primer dato
Si el numero es menor a[j+1]=val;
lo tomamos como la parte }
ordenada, el resto será la se recorre el arreglo y se
inserta el numero, se val = a[i];
parte desordenada. repite el algoritmo hasta }
quedar ordenado.