-----------------
#include
#include
//LA DOCUMENTACIàN CORRESPONDE A SEGMENTOS DE CODIGO -S-
//LOS CUALES TIENEN ASOCIADOS UNA DESCRIPCIàN GENERAL DE LO QUE HACE EL SEGMENTO
void imprimirVector(int v[] , int i, int j){
printf( "\n Ciclos i[%d], j [%d]\n", i, j );
for(int k=1;k<=10;k++){
printf( " [%d]", v[k] );
}
}//END imprimirVector
void main(){
clrscr();
int i, j, n=10, dato, v[11], conf=0, conwq=0, coni=0, conteo=0;
//---------S1: SOLICITA EL TAMAÑO DEL VECTOR----///
printf("---------------METODO DE INSERCIóN DIRECTA---------------\n");
//---------END S1
//---------S2: LLENA EL VECTOR CON LOS DATOS INGRESADOS----///
printf( " Ingrese los datos del vector...\n " );
for( i=1; i<=n; i++ ){
printf( "Ingrese el dato [ %d ] : ", i ) ;
scanf( " %d",&dato ) ;
v[i] = dato;
}//END FOR
//---------END S2
//---------S3:IMPRIME EL VECTOR V
printf( " Imprimiendo vector ingresado...\n" );
for( i=1; i<=n; i++ ){
printf( " [ %d ]", v[i] );
}//END FOR
//---------END S3
//---------S4: METODO POR INSERCIàN DIRECTA----///
printf( "\nCalculando inserciones..." ) ;
for( i=2; i<=n; i++){
v[0]=v[i];
j=i;
conf++;
while( v[0] < v[j-1] ){
v[j] = v[j-1]; //Moviemientos
j--;
//imprimirVector(v,i,j);
conwq++;
}//END WQ
v[j]=v[0] ;//Inserci¢n
coni++;
conteo = conteo + (i*j);
}//END FOR
printf( "\nFinalizaci¢n del ordenamiento...\n" ) ;
//---------END S4
//---------S5:IMPRIME EL VECTOR----///
printf( " \n Vector ordenado...\n" );
for( i=1; i<=n; i++ ){
printf( " [ %d ] ", v[i] );
}
//---------END S5
printf("\nImprimiendo resumen de ejecuci¢n...\n") ;
printf( " N£mero de operaciones del for : %d \n", conf );
printf( " N£mero de operaciones del WQ : %d \n ", conwq );
printf( " N£mero de inserciones : %d \n ", coni );
printf( " N£mero de operaciones total : %d ", conteo ) ;
getch();
}//END PRINCIPAL
---------------
Es un programa muy sencillo que representa un método de ordenamiento. El método es conocido como Clasificación Por Inserción Directa es muy diferente al método burbuja visto en clase. La filosofía de este método se basa en la búsqueda del elemento menor del vector, con el cual realiza operaciones comparación y ubicación, esta ultima, realizando desplazamientos secuenciales para lo cual se vale de inserciones. Por ejemplo,
dado un vector V,
8 14 5 9 3 23 17
el ordenamiento para cada ciclo del algoritmo es,
8 14 5 9 3 23 17
i=2 8 14 5 9 3 23 17
i=3 5 8 14 9 3 23 17
i=4 5 8 9 14 3 23 17
i=5 3 5 8 9 14 23 17
i=6 3 5 8 9 14 23 17
i=7 3 5 8 9 14 17 23
Inicialmente, el algoritmo asume que el primer elemento que conforma el vector se encuentra ordenado. Cuando i=2, el algoritmo encuentra que el número 14 es mayor que número 8, por lo tanto el 14 es insertado en su posición inicial. Cuando i = 3, encuentra que el número 5 es menor que 14 y que 8, por lo tanto lo ubica en la primera posición del vector y desplaza hacia la izquierda los otros dos elementos -los cuales se asumen como ya ordenados-. El proceso es repetitivo.
El código anterior, utiliza una función imprimir vector muy sencilla, la cual es invocada para que se imprima en pantalla paso a paso lo que ocurre. Al final del algoritmo, se imprime en pantalla un resumen de la ejecución, donde se indica el número de operaciones calculadas.
La sección de código que realiza el procesamiento grueso es S4. S4 es,
//---------S4: METODO POR INSERCIàN DIRECTA----///
printf( "\nCalculando inserciones..." ) ;
for( i=2; i<=n; i++){
v[0]=v[i];
j=i;
conf++;
while( v[0] < v[j-1] ){
v[j] = v[j-1]; //Moviemientos
j--;
//imprimirVector(v,i,j);
conwq++;
}//END WQ
v[j]=v[0] ;//Inserci¢n
coni++;
conteo = conteo + (i*j);
}//END FOR
printf( "\nFinalizaci¢n del ordenamiento...\n" ) ;
//---------END S4
En las próximas horas les publicaré en este blog, para cuando quedo el parcial unificado de programación II, les deseo mucha suerte, estaré atento a las inquietudes de ustedes en el laboratorio de CICOM -Ciencias Computacionales- al fondo de la Virtualteca I en horas de la mañana y de la tarde.
La guía de programación II, queda en la fotocopiadora frente a la Virtualteca I.
Suerte.


No hay comentarios:
Publicar un comentario