Sunteți pe pagina 1din 25

"Ao de la Integracin Nacional y el Reconocimiento de Nuestra Diversidad"

UNIVERSIDAD NACIONAL MAYOR DE SAN MARCOS Universidad del Per, Decana de Amrica

Facultad de Ingeniera de Sistemas e Informtica EAP: Ingeniera de Software Curso: Introduccin a la Computacin e Ingeniera de Software Profesor: Luis Guerra Grados. ---------------------------------------------------------------------

Ordenamiento por Insercin Directa


Trabajo Final de Curso Integrantes: - Barrantes Cuba Jhon Csar - Calvo Gordillo Jorge Eduardo - De la Cruz Castro Gustavo Nstor - Lujn Vila Frank Jos

2012

Ordenacin por Insercin Directa ICIS

INDICE

INTRODUCCIN
El ordenamiento es el proceso de reorganizacin de un conjunto dado de objetos en una secuencia especificada, el propsito del

ordenamiento principal es el de facilitar bsquedas. As, el objetivo de este proyecto es mostrar un mtodo que facilite el ordenamiento de un grupo de datos segn especificaciones del usuario, adems se demostrar de manera lgica y detallada el proceso y funcionamiento de dicho mtodo, incluyendo un ejemplo que ilustre el mtodo y facilite el entendimiento de este. As de las muchas tcnica a realizar, presentaremos El Mtodo de

ordenamiento por Insercin Directa, conocido tambin como el UNMSM

Ordenacin por Insercin Directa ICIS mtodo de la baraja. Este mtodo trata de reorganizar un conjunto dado de objetos en una secuencia especificada, y cuyo propsito es el de facilitar bsquedas.

ORDENAMIENTO POR SELECCIN DIRECTA


Este algoritmo es sencillo y se comporta razonablemente en diversas situaciones, adems 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. Despus, cuando hay k elementos ordenados de menor a mayor, se toma el elemento k+1 y se compara con todos los elementos ya ordenados, detenindose cuando se encuentra un elemento menor (todos los elementos mayores han sido desplazados una posicin a la derecha). En este punto se inserta el elemento k+1 debiendo desplazarse los dems elementos. Ventajas: UNMSM

Ordenacin por Insercin Directa ICIS Fcil implementacin. Requerimientos mnimos de memoria

Desventajas:

En insercin directa: Si observamos la posicin del valor que estamos ordenando se "borra" automticamente.

PROCEDIMIENTO DEL MTODO DE ORDENAMIENTO POR INSERCIN DIRECTA


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.

UNMSM

Ordenacin por Insercin Directa ICIS

4. Se desplaza una posicin 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.

Se repite el proceso hasta terminar la seccin de elementos no ordenados.

DIAGRAMA DE FLUJO
PRINCIPAL:

UNMSM

Ordenacin por Insercin Directa ICIS

INGRESAR:

UNMSM

Ordenacin por Insercin Directa ICIS

LISTANORMAL:

LISTADOCOD:

UNMSM

Ordenacin por Insercin Directa ICIS

LISTAEDAD:

UNMSM

Ordenacin por Insercin Directa ICIS

LISTAPELLIDOS:

UNMSM

Ordenacin por Insercin Directa ICIS

LISTANOMBRES:

UNMSM

10

Ordenacin por Insercin Directa ICIS

PSEUDOCDIGOS
// PROTOTIPO UNMSM

11

Ordenacin por Insercin Directa ICIS PROCEDIMIENTO ingresar (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listadocod (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listanormal (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listaedad (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listanombres (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) PROCEDIMIENTO listapellidos (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) // PROGRAMA PRINCIPAL INICIO entero opcin, n, edad[50], cdigo[50], r, j carcter 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 opcin: ) leer(opcion) caso opcin vale `1: ingresar (cdigo, apellidos, nombres, edad, &n) `2: listanormal (cdigo, apellidos, nombres, edad, c) `3: listadocod(cdigo, apellidos, nombres, edad, c) `4: listaedad(cdigo, apellidos, nombres, edad, c) `5: listapellidos (cdigo, apellidos, nombres, edad, c) `6: listanombres (cdigo, apellidos, nombres, edad, c) `7: mensaje (Gracias por usar el programa) Otro: mensaje(error) Mientras(opcin<>7) FIN // PROCEDIMIENTO INGRESO DE DATOS

UNMSM

12

Ordenacin por Insercin Directa ICIS PROCEDIMIENTO ingresar (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER 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(cdigo[c]) Escribir(Apellidos) Leer (apellidos[c]) Escribir(Nombres) Leer(nombres[c]) Escribir(Edad) Leer(edad[c]) Fpara FIN //PROCEDIMIENTO LISTA NORMAL PROCEDIMIENTO listanormal (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i Escribir(Listado de alumnos) Para i de 0 a i<c hacer Escribir(cdigo[i], apellidos[i], nombres[i], edad[i]) Fpara FIN //PROCEDIMIENTO LISTA ORDENADA POR CODIGOS PROCEDIMIENTO listadocod (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,j,temp Escribir(Lista ordenada por codigos) Para i de 0 a i<c hacer Temp=cdigo[i] Mientras (j>=0 y temp<cdigo[j]) hacer Cdigo[j+1]=cdigo[j--] Cdigo[j+1]=temp Fmientras Fpara Para i de 0 a i<c hacer UNMSM

13

Ordenacin por Insercin Directa ICIS Escribir(cdigo[i]) Fpara FIN //PROCEDIMIENTO LISTA ORDENADA POR NOMBRES PROCEDIMIENTO listanombres (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,j Carcter temp[30] Real comp Escribir(Lista ordenada por nombres) Para i de 0 a i<c hacer Para j de 0 a j<c hacer Comp=comparacin(nombres[j],nombres[j+1]) Si (comp>0) entonces Copiar nombres[j] en temp Copiar nombres[j+1] en nombres[j] Copiar temp en nombres[j+1] Fsi Fpara Fpara Para i de 0 a i<c hacer Escribir(nombres[i]) Fpara FIN //PROCEDIMIENTO LISTA ORDENADA POR APELLIDOS PROCEDIMIENTO listapellidos (ENTERO codigo[50],CARCTER apellidos[30] [30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,j Carcter temp[30] Real comp Escribir(Lista ordenada por apellidos) Para i de 0 a i<c hacer Para j de 0 a j<c hacer Comp=comparacin(apellidos [j], apellidos [j+1]) Si (comp>0) entonces Copiar apellidos [j] en temp Copiar apellidos [j+1] en apellidos [j] Copiar temp en apellidos [j+1] Fsi Fpara Fpara UNMSM

14

Ordenacin por Insercin Directa ICIS Para i de 0 a i<c hacer Escribir(apellidos [i]) Fpara FIN //PROCEDIMIENTO LISTA ORDENADA POR EDADES PROCEDIMIENTO listaedad (ENTERO codigo[50],CARCTER apellidos[30][30], CARCTER nombres[30][30], ENTERO edad[50], ENTERO *pn) INICIO Entero i,j,temp Escribir(Lista ordenada por edades) Para i de 0 a i<c hacer Temp=edad[i] Mientras (j>=0 y temp< edad [j]) hacer edad [j+1]= edad [j--] edad [j+1]=temp Fmientras Fpara Para i de 0 a i<c hacer Escribir(edad[i]) Fpara FIN

PANTALLAS

UNMSM

15

Ordenacin por Insercin Directa ICIS

UNMSM

16

Ordenacin por Insercin Directa ICIS

UNMSM

17

Ordenacin por Insercin Directa ICIS

CODIFICACION EN C++
#include <cstdlib> #include <iostream> #include <stdio.h> #include <string.h> #include <ctype.h> using namespace std; int c=0; void ingresar(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int *pn); void listadocod(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int c); void listanormal(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c); void listaedad(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int c); void listanombres(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c); void listapellidos(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c); 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; UNMSM

18

Ordenacin por Insercin Directa ICIS 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); UNMSM

19

Ordenacin por Insercin Directa ICIS cout<<" "<<endl; system("PAUSE"); return EXIT_SUCCESS; } //Procedimiento Ingreso de datos void ingresar(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int *pn) {int i,a; 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++; } } //Procedimiento lista normal void listanormal(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c) { int i,j,temp; cout<<"\n\n"<<"\t\t\tLISTADO DE ALUMNOS"; cout<<"\n"<<"\t\t\t------------------"; cout<<" "<<endl; cout<<"\n"<<" CODIGO"<<"\t\tAPELLIDOS Y NOMBRES"<<"\t\tEDAD"; 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; } UNMSM

20

Ordenacin por Insercin Directa ICIS

//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; cout<<"\n\n"<<"\t\t\tLISTA ORDENADA POR CODIGOS"; cout<<"\n"<<"\t\t\t--------------------------"; cout<<" "<<endl; cout<<"\n"<<" CODIGO"; 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"; } //Procedimiento lista ordenada por nombres void listanombres(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c) { int i,j; char temp[30]; float comp; cout<<"\n\n"<<"\t\t\tLISTA ORDENADA POR NOMBRES"; cout<<"\n"<<"\t\t\t--------------------------"; cout<<" "<<endl; cout<<"\n"<<" NOMBRES"; 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); } } UNMSM

21

Ordenacin por Insercin Directa ICIS } for(i=0;i<c;i++) { cout<<"\n\t"<<nombres[i]; } cout<<"\n\n"; c++; return; } //Procedimiento lista ordenada por Apellidos void listapellidos(int codigo[50],char apellidos[30][30],char nombres[30] [30],int edad[50],int c) { int i,j; char temp[30]; float comp; cout<<"\n\n"<<"\t\t\tLISTA ORDENADA POR APELLIDOS"; cout<<"\n"<<"\t\t\t----------------------------"; cout<<" "<<endl; cout<<"\n"<<" APELLIDOS"; 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"; } //Procedimiento lista ordenada por edades void listaedad(int codigo[50],char apellidos[30][30],char nombres[30][30],int edad[50],int c) UNMSM

22

Ordenacin por Insercin Directa ICIS { int i,j,temp; cout<<"\n\n"<<"\t\t\tLISTA ORDENADA POR EDADES"; cout<<"\n"<<"\t\t\t-------------------------"; cout<<" "<<endl; cout<<"\t"<<" EDADES"; 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; }

PRUEBA DEL MTODO APLICADO

CONCLUSIONES

UNMSM

23

Ordenacin por Insercin Directa ICIS El ordenamiento por insercin directa es prctico y sencillo, se encuentra entre los mtodos ms eficientes pues sus operaciones son pocas en comparacin con otros mtodos. La utilidad de este programa radica en la capacidad para comprender este mtodo, pues la lgica es similar a la de cualquier persona al ordenar cartas que encuentre al azar y de forma desordenada. Este mtodo es muy til en la elaboracin de arreglos unidimensionales ordenados, pues permite la ordenacin de una manera eficiente y segura, conservando los datos eficazmente.

BIBLIOGRAFA
UNMSM

24

Ordenacin por Insercin Directa ICIS http://es.scribd.com/beastieux/d/1739233-Ordenamiento-en-C http://insercion-binaria.tripod.com/index_files/insercion_directa.htm http://saforas.wordpress.com/2008/01/06/metodos-de-ordenamiento-hechoen-c/ http://latecladeescape.com/algoritmos/1123-ordenacion-por-insercion-directahttp://www.youtube.com/watch?v=brshaFqTEO4&feature=fvwrel Programacin en C++ Fundamentos de Programacin Fundamentos de Programacin Edgar Ruiz Lizama Luis Joyanes Aguilar Ricardo Marcelo Villalobos

UNMSM

25

S-ar putea să vă placă și