Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Este algoritmo es sencillo y se comporta razonablemente en diversas situaciones, además brinda buenos
resultados a efectos practicos, y es el que las personas utilizan generalmente al ordenar las cartas.
Inicialmente se tiene un solo elemento, que obviamente es un conjunto ordenado. Después, cuando hay k
elementos ordenados de menor a mayor, se toma el elemento k+1 y se compara con todos los elementos ya
ordenados, deteniéndose cuando se encuentra un elemento menor (todos los elementos mayores han sido
desplazados una posición a la derecha). En este punto se inserta el elemento k+1 debiendo desplazarse los demás
elementos.
Ventajas:
Fácil implementación.
Requerimientos mínimos de memoria
Desventajas:
- En inserción directa: Si observamos la posición del valor que estamos ordenando se "borra"
automáticamente.
1. Partimos de un arreglo aleatoriamente ordenado, y marcamos su primer elemento como parte ordenada, el
resto será la parte desordenada.
2. Tomamos el primer elemento de la parte no ordenada, y se almacena en una variable temporal.
3. Comparamos empezando por el final de la parte ordenada, hasta que se encuentra un elemento menor.
4. Se desplaza una posición a la derecha todos los elementos que han resultado mayores que el que queremos
insertar y se coloca el valor de la variable temporal en el lugar encontrado.
DIAGRAMA DE FLUJO
PRINCIPAL:
INGRESAR:
LISTANORMAL:
LISTADOCOD:
LISTAEDAD:
LISTAPELLIDOS:
LISTANOMBRES:
PSEUDOCÓDIGOS
// PROTOTIPO
// PROGRAMA PRINCIPAL
INICIO
entero opción, n, edad[50], código[50], r, j
carácter apellidos[30][30], nombres[30][30]
cadena mensaje
hacer
escribir(“menu”)
escribir(“1.- Ingreso de datos: ”)
escribir(“2.- Listado normal”)
escribir(“3.- Lista ordenada por codigo”)
escribir(“4.- Lista ordenada por edades”)
escribir(“5.- Lista ordenada por apellidos”)
escribir(“6.- Lista ordenada por nombres”)
escribir(“7.- Salir”)
escribir(“ Seleccione opción: ”)
leer(opcion)
caso opción vale
`1´: ingresar (código, apellidos, nombres, edad, &n)
`2´: listanormal (código, apellidos, nombres, edad, c)
`3´: listadocod(código, apellidos, nombres, edad, c)
`4´: listaedad(código, apellidos, nombres, edad, c)
`5´: listapellidos (código, apellidos, nombres, edad, c)
`6´: listanombres (código, apellidos, nombres, edad, c)
`7´: mensaje (“Gracias por usar el programa”)
Otro: mensaje(“error”)
Mientras(opción<>7)
FIN
// PROCEDIMIENTO INGRESO DE DATOS
PROCEDIMIENTO ingresar (ENTERO codigo[50],CARÁCTER apellidos[30][30], CARÁCTER nombres[30][30], ENTERO
edad[50], ENTERO *pn)
INICIO
Entero i,a
Hacer
Escribir(“Numero de alumnos”)
Leer(*pn)
Mientras (*pn<1 o *pn>50)
Para i de 0 a i<*pn hacer
Escribir(“Codigo”)
Leer(código[c])
Escribir(“Apellidos”)
Leer (apellidos[c])
Escribir(“Nombres”)
Leer(nombres[c])
Escribir(“Edad”)
Leer(edad[c])
Fpara
FIN
INICIO
Entero i
Escribir(“Listado de alumnos”)
Para i de 0 a i<c hacer
Escribir(“código[i]”, “apellidos[i]”, “nombres[i]”, “edad[i]”)
Fpara
FIN
INICIO
Entero i,j,temp
INICIO
Entero i,j
Carácter temp[30]
Real comp
FIN
INICIO
Entero i,j
Carácter temp[30]
Real comp
INICIO
Entero i,j,temp
FIN
PANTALLAS
CODIFICACION EN C++
#include <cstdlib>
#include <iostream>
#include <stdio.h>
#include <string.h>
#include <ctype.h>
int main()
{
int opcion,n,edad[50],codigo[50],r,j;
char apellidos[30][30],nombres[30][30];
//Programa Principal
do
{
cout<<" "<<endl;
cout<<" ...:::#::: Programa de Ordenamiento por Insercion Directa :::#::::...";
cout<<" "<<endl;
cout<<"\n MENU";
cout<<" "<<endl;
cout<<"\n 1. Ingreso de datos: Codigo, Apellidos, Nombres, Edad";
cout<<"\n 2. Listado Normal";
cout<<"\n 3. Lista Ordenada de Codigos";
cout<<"\n 4. Lista Ordenada de Edades";
cout<<"\n 5. Lista Ordenada por Apellidos";
cout<<"\n 6. Lista Ordenada por Nombres";
cout<<"\n 7. Salir";
cout<<" "<<endl;
cout<<"\n Seleccione opcion: ";
cin>>opcion;
switch(opcion)
{
case 1:ingresar(codigo,apellidos,nombres,edad,&n);
cout<<" "<<endl;
cout<<" -------------------------------------"<<endl;
system("PAUSE");
system("cls");
break;
case 2:listanormal(codigo,apellidos,nombres,edad,c);
cout<<" "<<endl;
system("PAUSE");
fflush(stdin);
system("cls");
break;
case 3:listadocod(codigo,apellidos,nombres,edad,c);
cout<<" "<<endl;
system("PAUSE");
fflush(stdin);
system("cls");
break;
case 4:listaedad(codigo,apellidos,nombres,edad,c);
cout<<" "<<endl;
system("PAUSE");
fflush(stdin);
system("cls");
break;
case 5:listapellidos(codigo,apellidos,nombres,edad,c);
cout<<" "<<endl;
system("PAUSE");
fflush(stdin);
system("cls");
break;
case 6:listanombres(codigo,apellidos,nombres,edad,c);
cout<<" "<<endl;
system("PAUSE");
fflush(stdin);
system("cls");
break;
case 7:
cout<<" "<<endl;
cout<<" Gracias por usar el programa ...";
cout<<" "<<endl;
break;
default:cout<<" "<<endl;
cout<<"Error, pulse 1,2,3,4,5,6 o 7"<<endl;
cout<<" "<<endl;
system("PAUSE");
fflush(stdin);
system("cls");
break;
}
}while(opcion!=7);
cout<<" "<<endl;
system("PAUSE");
return EXIT_SUCCESS;
}
do{
cout<<"\n Numero de alumnos(Entre 1 y 50): ";
cin>>*pn;
}while(*pn<1 || *pn>50);
for(i=0;i<*pn;i++)
{
cout<<" -------------------------------------"<<endl;
cout<<"\n Codigo (Solo Numeros): ";
cin>>codigo[c];
fflush(stdin);
cout<<"\n Apellidos: ";
cin.getline(apellidos[c],28);
cout<<"\n Nombres: ";
cin.getline(nombres[c],28);
cout<<"\n Edad: ";
cin>>edad[c];
c++;
}
}
for(i=0;i<c;i++)
{
cout<<"\n"<<codigo[i]<<"\t"<<apellidos[i]<<" "<<nombres[i]<<"\t\t\t"<<edad[i];
}
cout<<"\n\n";
c++;
return;
}
//Procedimiento lista ordenada por codigos
void listadocod(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int c)
{int i,j,temp;
for(i=0;i<c;i++)
{
temp=codigo[i];
j=i-1;
while(j>=0 && temp<codigo[j])
codigo[j+1]=codigo[j--];
codigo[j+1]=temp;
}
for(i=0;i<c;i++)
{
cout<<"\n\t"<<codigo[i];
}
cout<<"\n\n";
}
for(i=0;i<c;i++)
{
for(j=0;j<c-i;j++)
{
comp = strcmp( nombres[j], nombres[j+1]);
if(comp > 0)
{
strcpy(temp,nombres[j]);
strcpy(nombres[j],nombres[j+1]);
strcpy(nombres[j+1],temp);
}
}
}
for(i=0;i<c;i++)
{
cout<<"\n\t"<<nombres[i];
}
cout<<"\n\n";
c++;
return;
for(i=0;i<c;i++)
{
for(j=0;j<c-i;j++)
{
comp = strcmp(apellidos[j],apellidos[j+1]);
if(comp > 0)
{
strcpy(temp,apellidos[j]);
strcpy(apellidos[j],apellidos[j+1]);
strcpy(apellidos[j+1],temp);
}
}
for(i=0;i<c;i++)
{
cout<<"\n\t"<<apellidos[i];
}
cout<<"\n\n";
for(i=0;i<c;i++)
{
temp=edad[i];
j=i-1;
while(j>=0 && temp<edad[j])
edad[j+1]=edad[j--];
edad[j+1]=temp;
for(i=0;i<c;i++)
{
cout<<"\n\t"<<edad[i];
}
cout<<"\n\n";
c++;
return;
CONCLUSIONES
El ordenamiento por inserción directa es práctico y sencillo, se encuentra entre los métodos más eficientes pues
sus operaciones son pocas en comparación con otros métodos. La utilidad de este programa radica en la
capacidad para comprender este método, pues la lógica es similar a la de cualquier persona al ordenar cartas que