add bubble sort call and time its execution

This commit is contained in:
Chris Cromer 2018-11-11 16:51:49 -03:00
parent e7655e3f5d
commit 5b77033905
Signed by: cromer
GPG Key ID: 39CC813FF3C8708A
1 changed files with 64 additions and 14 deletions

View File

@ -17,6 +17,8 @@
#include <stdlib.h> #include <stdlib.h>
#include <getopt.h> #include <getopt.h>
#include "random.h" #include "random.h"
#include "timer.h"
#include "bubble_sort.h"
#define SORT_VERSION "1.0.0" #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, " -e, --elegir el usuario debe elegir los \"n\" valores de\n");
fprintf(stdout, " elementos a ordenar, sin esta opción los\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, " 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"); fprintf(stdout, " -v, --version mostrar la versión del programa\n");
} }
@ -48,15 +51,24 @@ void extra_algorithm() {
exit(2); 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 * La entrada del programa
* @param argc La cantidad de argumentos pasado al programa * @param argc La cantidad de argumentos pasado al programa
* @return Retorna el codigo de error o 0 por exito * @return Retorna el codigo de error o 0 por exito
*/ */
int main (int argc, char **argv) { int main (int argc, char **argv) {
int i; long long i;
int n = 10; int n = 10;
int elegir = 0; int elegir = 0;
int imprimir = 0;
int algoritmo = -1; int algoritmo = -1;
int opt; int opt;
int long_index = 0; int long_index = 0;
@ -69,6 +81,7 @@ int main (int argc, char **argv) {
{"selection", no_argument, 0, 's'}, {"selection", no_argument, 0, 's'},
{"n", required_argument, 0, 'n'}, {"n", required_argument, 0, 'n'},
{"elegir", no_argument, 0, 'e'}, {"elegir", no_argument, 0, 'e'},
{"imprimir", no_argument, 0, 'i'},
{"version", no_argument, 0, 'v'}, {"version", no_argument, 0, 'v'},
{0, 0, 0, 0} {0, 0, 0, 0}
}; };
@ -117,7 +130,7 @@ int main (int argc, char **argv) {
algoritmo = 5; algoritmo = 5;
break; break;
case 'n': case 'n':
n = atoi(optarg); n = atol(optarg);
if (n <= 1) { if (n <= 1) {
fprintf(stderr, "Error: n tiene que ser mayor de 1!\n"); fprintf(stderr, "Error: n tiene que ser mayor de 1!\n");
return 3; return 3;
@ -126,6 +139,9 @@ int main (int argc, char **argv) {
case 'e': case 'e':
elegir = 1; elegir = 1;
break; break;
case 'i':
imprimir = 1;
break;
case 'v': case 'v':
printf("sort versión: %s\n", SORT_VERSION); printf("sort versión: %s\n", SORT_VERSION);
return 0; return 0;
@ -136,23 +152,14 @@ int main (int argc, char **argv) {
} }
} }
if (algoritmo == -1) { int *array = malloc(sizeof(int) * n);
fprintf(stderr, "Error: No se seleccionó un algoritmo!\n");
print_usage();
return 4;
}
int array[n];
// Llenar el array con valores para ordenar después // Llenar el array con valores para ordenar después
for (i = 0; i < n; i++) { for (i = 0; i < n; i++) {
if (elegir == 0) { if (elegir) {
array[i] = gen_rand(0, 100000);
}
else {
opt = 0; opt = 0;
while (opt <= 1) { while (opt <= 1) {
fprintf(stdout, "Elegir elemento %d: ", i + 1); fprintf(stdout, "Elegir elemento %lli: ", i + 1);
fscanf(stdin, "%d", &opt); fscanf(stdin, "%d", &opt);
if (opt <= 1) { if (opt <= 1) {
fprintf(stdout, "Número invalido! Tiene que ser mayor de 1!\n"); 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; 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; return 0;
} }