Sunteți pe pagina 1din 16

CAROLINA LEYVA ARCINIEGA

Ordenamiento por insercin


}

} }

} } } } } } }

En este tipo de algoritmo los elementos que van a ser ordenados son considerados uno a la vez. Cada elemento es INSERTADO en la posicin apropiada con respecto al resto de los elementos ya ordenados. Entre estos algoritmos se encuentran el de INSERCION DIRECTA,SHELL SORT, INSERCION BINARIA y HASHING. Este procedimiento recibe el arreglo de datos a ordenar a[]y altera las posiciones de sus elementos hasta dejarlos ordenados de menor a mayor. N representa el nmero de elementos que contiene a[]. paso 1: [Para cada pos. del arreglo] For i 2 to N do paso 2: [Inicializa v y j] v a[i] j i. paso 3: [Compara v con los anteriores] While a[j-1] > v AND j>1 do paso 4: [Recorre los datos mayores] Set a[j] a[j-1], paso 5: [Decrementa j] set j j-1. paso 5: [Inserta v en su posicin] Set a[j] v. paso 6: [Fin] End.

El ordenamiento por seleccin


} }

} } }

Consiste en buscar el menor elemento del arreglo y colocarlo en la primera posicin. Luego se busca el segundo elemento mas pequeo del arreglo y se coloca en la segunda posicin. El proceso continua hasta que todos los elementos del arreglo han sido ordenados. El mtodo se basa en los siguientes principios: 1) Seleccionar el menor elemento del arreglo 2) Intercambiar dicho elemento con el primero 3) Repetir los pasos anteriores con los (n-1),(n2) elementos y as sucesivamente hasta que solo quede el elemento mayor.

ordenamiento por seleccin (Selection Sort en ingls) es un algoritmo de ordenamiento que requiere O(n2) operaciones para ordenar una lista de n elementos. } Su funcionamiento es el siguiente: } Buscar el mnimo elemento de la lista } Intercambiarlo con el primero } Buscar el mnimo en el resto de la lista } Intercambiarlo con el segundo } Y en general: } Buscar el mnimo elemento entre una posicin i y el final de la lista } Intercambiar el mnimo con el elemento de la posicin i
} El

} De

esta manera se puede escribir el siguiente pseudocdigo para ordenar una lista de n elementos indexados desde el 1: } para i=1 hasta n-1 } minimo = i; } para j=i+1 hasta n } si lista[j] < lista[minimo] entonces } minimo = j /* (!) */ } fin si } fin para } intercambiar(lista[i], lista[minimo]) } fin para

} Este

algoritmo mejora ligeramente el algoritmo de la burbuja. En el caso de tener que ordenar un vector de enteros, esta mejora no es muy sustancial, pero cuando hay que ordenar un vector de estructuras ms complejas, la operacin intercambiar() sera ms costosa en este caso. Este algoritmo realiza muchas menos operaciones intercambiar() que el de la burbuja, por lo que lo mejora en algo. Si la lnea comentada con (!) se sustituyera por intercambiar(lista[i], lista[j]) tendramos una versin del algoritmo de la burbuja (naturalmente eliminando el orden intercambiar del final).

EDICION MODIFICACION DE REGISTROS C++ o editar un registro es uno de los procesos mas comunes con archivos en disco, generalmente despus de un fuerte proceso de captura de registros, una revisin o consulta general muestra muchos de ellos con errores de captura. } vamos a editar el segundo registro.
} Modificar

} } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } } }

#include <stdio.h> #include <conio.h> #include <string.h> struct { int clave; char nombre[30]; int edad;} animalito; void main() { clrscr(); // cargando clave a buscar printf("dame clave editar:"); int claveb; scanf("%d",&claveb); //abriendo, leyendo,cargando estructura FILE *archdisco; archdisco = fopen("cpp:\\ac\\archivo1.dat","rb+"); // usar fseek() para posicionarse al principio de registro buscado fseek (archdisco, (long)(claveb)* sizeof(animalito), 0 ); // ahora se lee el registro fread(&animalito,sizeof(animalito),1,archdisco); // desplegando estructura y asegurandose printf("%d ",animalito.clave); printf("%s ",animalito.nombre);

} } } } } } } } } } } } } } } } } } } } } } } } } } }

printf("%d ",animalito.edad); printf("\n");getchar(); //recapturando los nuevos datos printf("dame nuevo nombre :");gets(animalito.nombre); printf("dame nueva edad :");scanf("%d",&animalito.edad); // regresando a apuntador para regrabar fseek (archdisco, (long)(claveb)* sizeof(animalito), 0 ); fwrite(&animalito,sizeof(animalito),1,archdisco); // no olvidar cerrar archivo fclose(archdisco); //avisando printf("REGISTRO EDITADO"); getchar();getchar(); }

Observar que es el programa normal de bsqueda pero ya desplegado el registro se piden los nuevos datos, posteriormente se regresa el apuntador de registros a la posicin original para volverse a regrabar el registro pero con los datos ya editados.

Bsqueda Hash
este mtodo se requiere que los elementos estn ordenados. } El mtodo consiste en asignar el ndice a cada elemento mediante una transformacin del elemento, esto se hace mediante una funcin de conversin llamada funcin hash. Hay diferentes funciones para transformar el elemento y el nmero obtenido es el ndice del elemento.
} En

La principal forma de transformar el elemento es asignarlo directamente, es decir al 0 le corresponde el ndice 0, al 1 el 1, y as sucesivamente pero cuando los elementos son muy grandes se desperdicia mucho espacio ya que necesitamos arreglo grandes para almacenarlos y estos quedan con muchos espacios libres, para utilizar mejor el espacio se utilizan funciones mas complejas. La funcin de hash ideal debera ser directiva, esto es, que a cada elemento le corresponda un ndice, y que a cada ndice le corresponda un elemento, pero no siempre es fcil encontrar esa funcin, e incluso a veces es intil, ya que puedes no saber el nmero de elementos a almacenar. La funcin de hash depende dcada problema y de cada finalidad, y se pueden utilizar con nmeros o cadenas, pero las ms utilizadas son:

Restas sucesivas:
funcin se emplea con claves numricas entre las que existen huecos de tamao conocido, obtenindose direcciones consecutivas. Un ejemplo serian los alumnos de ingeniera en sistemas que entraron en el ao 2005 sus nmeros de control son consecutivos y esta definido el numero de alumnos. } 05210800 -05210800 0 } 05210801 -05210800 1 } 05210802 -05210800 2 } } 05210899 -05210800 99
} Esta

Aritmtica modular:
}

} } } } } }

El ndice de un nmero es resto de la divisin de ese nmero entre un nmero N prefijado, preferentemente primo. Los nmeros se guardarn en las direcciones de memoria de 0 a N-1. Este mtodo tiene el problema de que dos o ms elementos pueden producir el mismo residuo y un ndice puede ser sealado por varios elementos. A este fenmeno se le llama colisin. Si el nmero N es el 7, los nmeros siguientes quedan transformados en: 1679 > 6 4567 > 3 8471 > 1 0435 > 1 5033 > 0 Mientras mas grande sea nmero de elementos es mejor escoger un nmero primo mayor para seccionar el arreglo en ms partes. El nmero elegido da el nmero de partes en que se secciona el arreglo, y las cada seccin esta compuesta por todos los elementos que arrojen el mismo residuo, y mientras mas pequeas sean las secciones la bsqueda se agilizara mas que es lo que nos interesa.

Mitad del cuadrado:


} Consiste

en elevar al cuadrado la clave y coger las cifras centrales. Este mtodo tambin presenta problemas de colisin. } 709^2=502681 > 26 } 456^2=207936 > 79 } 105^2=11025 > 10 } 879^2=772641 > 26 } 619^2=383161 > 31 } Nota: en caso de que la cifra resultante sea impar se toma el valor nmero y el anterior.

Truncamiento:
} Consiste

en ignorar parte del nmero y utilizar los elementos restantes como ndice. Tambin se produce colisin. Por ejemplo, si un nmero de 7 cifras se debe ordenar en un arreglo de elementos, se pueden tomar el segundo, el cuarto y el sexto para formar un nuevo nmero: } 5700931 > 703 } 3498610 > 481 } 0056241 > 064 } 9134720 > 142 } 5174829 > 142

Plegamiento:
} Consiste

en dividir el nmero en diferentes partes, y operar con ellas (normalmente con suma o multiplicacin). Tambin se produce colisin. Por ejemplo, si dividimos el nmero de 7 cifras en 2, 2 y 3 cifras y se suman, dar otro nmero de tres cifras (y si no, se toman las tres ltimas cifras): 5700931 > 57 + 00 + 931 = 988 } 3498610 > 34 + 98 + 610 = 742 } 0056241 > 00 + 56 + 241 = 297 } 9134720 > 91 + 34 + 720 = 845 } 5174929 > 51 + 74 + 929 = 1054

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