diff --git a/src/sort.c b/src/sort.c index d779225..8e17ddc 100644 --- a/src/sort.c +++ b/src/sort.c @@ -17,6 +17,8 @@ #include #include #include "random.h" +#include "timer.h" +#include "bubble_sort.h" #define SORT_VERSION "1.0.0" @@ -36,6 +38,7 @@ void print_usage() { fprintf(stdout, " -e, --elegir el usuario debe elegir los \"n\" valores de\n"); fprintf(stdout, " elementos a ordenar, sin esta opción los\n"); fprintf(stdout, " valores son elegido por el programa al azar\n"); + fprintf(stdout, " -i, --imprimir imprimir el array antes y despues de ordenar\n"); fprintf(stdout, " -v, --version mostrar la versión del programa\n"); } @@ -48,15 +51,24 @@ void extra_algorithm() { exit(2); } +void print_array(int *array, int n) { + int i; + for (i = 0; i < n; i++) { + fprintf(stdout, "%d ", array[i]); + } + fprintf(stdout, "\n"); +} + /** * La entrada del programa * @param argc La cantidad de argumentos pasado al programa * @return Retorna el codigo de error o 0 por exito */ int main (int argc, char **argv) { - int i; + long long i; int n = 10; int elegir = 0; + int imprimir = 0; int algoritmo = -1; int opt; int long_index = 0; @@ -69,6 +81,7 @@ int main (int argc, char **argv) { {"selection", no_argument, 0, 's'}, {"n", required_argument, 0, 'n'}, {"elegir", no_argument, 0, 'e'}, + {"imprimir", no_argument, 0, 'i'}, {"version", no_argument, 0, 'v'}, {0, 0, 0, 0} }; @@ -117,7 +130,7 @@ int main (int argc, char **argv) { algoritmo = 5; break; case 'n': - n = atoi(optarg); + n = atol(optarg); if (n <= 1) { fprintf(stderr, "Error: n tiene que ser mayor de 1!\n"); return 3; @@ -126,6 +139,9 @@ int main (int argc, char **argv) { case 'e': elegir = 1; break; + case 'i': + imprimir = 1; + break; case 'v': printf("sort versión: %s\n", SORT_VERSION); return 0; @@ -136,23 +152,14 @@ int main (int argc, char **argv) { } } - if (algoritmo == -1) { - fprintf(stderr, "Error: No se seleccionó un algoritmo!\n"); - print_usage(); - return 4; - } - - int array[n]; + int *array = malloc(sizeof(int) * n); // Llenar el array con valores para ordenar después for (i = 0; i < n; i++) { - if (elegir == 0) { - array[i] = gen_rand(0, 100000); - } - else { + if (elegir) { opt = 0; while (opt <= 1) { - fprintf(stdout, "Elegir elemento %d: ", i + 1); + fprintf(stdout, "Elegir elemento %lli: ", i + 1); fscanf(stdin, "%d", &opt); if (opt <= 1) { fprintf(stdout, "Número invalido! Tiene que ser mayor de 1!\n"); @@ -160,6 +167,49 @@ int main (int argc, char **argv) { } array[i] = opt; } + else { + array[i] = gen_rand(-1000, 5000); + } } + + if (imprimir) { + fprintf(stdout, "\nAntes:\n"); + print_array(array, n); + } + + if (algoritmo == 0) { + // merge sort + } + else if (algoritmo == 1) { + // quick sort + } + else if (algoritmo == 2) { + start_timer(); + bubble_sort(array, n); + stop_timer(); + } + else if (algoritmo == 3) { + // bitonic sort + } + else if (algoritmo == 4) { + // count sort + } + else if (algoritmo == 5) { + // selection sort + } + else { + fprintf(stderr, "Error: No se seleccionó un algoritmo valido!\n"); + print_usage(); + return 4; + } + + if (imprimir) { + fprintf(stdout, "\nDespués:\n"); + print_array(array, n); + } + + free(array); + + print_timer(); return 0; }