Algoritmos de Ordenación, programas en C.
1) En este directorio se encuentran los siguientes archivos
README.txt este archivo
prel.h definiciones preliminares
swap.c definición del procedimiento swap
arrayops.c operaciones auxiliares para incializar, mostrar, ... arreglos
mysort.c definición del programa principal para ordenar
bothsorts.c definición del programa principal para ordenar usando ambos
métodos (inserción y selección) y comprobar que los resultados
sean idénticos
mysorts.c definición del programa principal que ordena usando
varios métodos y comprueba que los resultados sean idénticos
ssort.c definición de la ordenación por selección
isort.c definición de la ordenación por inserción
msort.c definición de la ordenación por intercalación (merge sort)
qsort.c definición de la ordenación rápida (quick sort)
bsort.c definición de la ordenación "burbuja" (bubble sort)
sorts.tgz archivo tar.gz con todos estos archivos
Lean los archivos y procuren entenderlos (excepto qsort.c y bsort.c),
pregunten lo que no entienden. Los programas fueron escritos para
que ustedes PUEDAN LEERLOS. Reporten errores en el código o en las
pre y pos condiciones e invariantes. También sugieran las mejoras
que se les ocurran.
2) para compilar y ejecutar los algoritmos de ordenación:
cc -Wall -ansi -pedantic -o mysort swap.c ssort.c arrayops.c mysort.c
./mysort
realiza la ordenación por selección de un arreglo inicializado
(pseudo)aleatoriamente
para ejecutar la ordenación por inserción cambiar ssort.c por isort.c
3) "jueguen" con el código, cambienle cosas, vuelvan a compilar y
ejecutar, etc. Por ejemplo, cambien la definición de length_array
en prel.h, compilen, ejecuten.
4) para que la inicialización (pseudo)aleatoria sea siempre la misma,
abrir arrayops.c y encerrar la línea 13 entre /* y */ (donde dice
"srand(time(NULL));" debe decir "/* srand(time(NULL)); */").
A esto le llamamos "comentar" la línea 13, ya que transforma un trozo
de código en un "comentario".
Luego de comentar dicha línea, volver a compilar y ejecutar.
5) Para correr los 5 algoritmos de ordenación, abrir prel.h y comentar
la línea 6. Compilar y ejecutar mediante:
cc -Wall -ansi -pedantic -o mysorts swap.c ssort.c isort.c msort.c bsort.c qsort.c arrayops.c mysorts.c
./mysorts
Observar que hemos agregado los 5 algoritmos de ordenación y cambiado "mysort"
por "mysorts" en varias partes de la línea de compilación.
6) Para contar los números de operaciones de la ordenación por inserción
y la ordenación por selección,
a) declarar 2 variables enteras nswap y ncomp en prel.h
b) modificar swap.c, agregando una instrucción que incremente el contador nswap
c) modificar isort.c y ssort.c para que en cada comparación de elementos del
arreglo se incremente el contador ncomp
d) modificar mysort.c para que antes de llamar a sort inicialice los contadores
en cero y para que después de ordenar muestre por pantalla el número de
comparaciones y de swaps
b') Alternativamente, b) puede reemplazarse por hacer con nswap algo parecido a lo
que indica el punto c)
c') Inversamente, para hacer c) copiando lo que dice b), habría que definir una
función booleana "smaller" en un archivo smaller.c. En isort.c y ssort.c, usar
la función smaller en vez de "<" para comparar elementos del arreglo. En smaller.c
la definición de la función "smaller" se define en términos de "<" e incrementa
el contador ncomp.
7) Para ejecutar los dos algoritmos simultáneamente, modificar mysorts.c eliminando
todo lo que tiene que ver con merge sort, quick sort y bubble sort. Inicializar
y mostrar los contadores antes y despues de llamar a insertion_sort y selection_sort.
O más fácil, usar bothsorts.c editando lo que considere adecuado.
8) "Documenten" los cambios que hacen insertando comentarios como los que ya tienen
los programas. Conserven el "estilo", es decir, manera de indentar, uso de nombres,
etc.