Created
June 23, 2013 17:27
-
-
Save ACruz91/5845795 to your computer and use it in GitHub Desktop.
Este ejercicio trata de rellenar un vector y ordenarlo mediante la función QuickSort. Cabe destacar que la visualización de los datos se hace de manera recursiva y la ordenación está condicionada por los argumentos en línea de ordenes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <stdio.h> | |
#include <stdlib.h> | |
#include <string.h> | |
int *reservaMemoria(int n); | |
void introducirDatos(int *vector, int n); | |
void visualizarDatos(int *vector, int n); | |
int asc(const void *e1 ,const void *e2); | |
int desc(const void *e1 ,const void *e2); | |
void imprimir(int n); | |
int main(int argc, char const *argv[]) | |
{ | |
int *vector; | |
int i,n,opc,or; | |
/*Argumentos de linea de Ordenes*/ | |
if(argc!=2){ | |
printf("\n ** ERROR ** Argumento en linea de Ordenes Incorrecto\n"); | |
printf("\n -Sintaxis correcta: ./ejercicio2 a (Orden Ascedente)\n"); | |
printf("\n -Sintaxis correcta: ./ejercicio2 d (Orden Descendente)\n"); | |
exit(-1); | |
} | |
if(strcmp(argv[1],"d")==0) | |
or=0; | |
else if(strcmp(argv[1],"a")==0) | |
or=1; | |
else{ | |
printf("\n ** ERROR ** Caracter Erroneo\n"); | |
printf("\n a (Orden Ascedente)\n"); | |
printf("\n d (Orden Descendente)\n\n"); | |
exit(-1); | |
} | |
system("clear"); | |
printf("Por favor introduzca el tamaño del vector: "); | |
scanf("%d",&n); | |
vector=reservaMemoria(n); | |
do{ | |
system("clear"); | |
if(or == 1) | |
printf("\n==========Orden Ascendente con %d Numeros==========\n",n); | |
else | |
printf("\n==========Orden Descendente con %d Numeros==========\n",n); | |
printf("1. Introducir Datos\n"); | |
printf("2. Visualizar Datos\n"); | |
printf("3. Ordenar Datos\n"); | |
printf("0. Salir\n"); | |
printf("====================================================\n"); | |
printf("Introduzca una opcion: "); | |
scanf("%d",&opc); | |
switch(opc){ | |
case 1: | |
system("clear"); | |
introducirDatos(vector,n); | |
imprimir(n); | |
break; | |
case 2: | |
system("clear"); | |
printf("Vector ----> "); | |
visualizarDatos(vector,n); | |
break; | |
case 3: | |
system("clear"); | |
if(or==1){ | |
printf("Ordenación QuickSort ----> "); | |
qsort((int *)vector ,n,sizeof(int),&asc); | |
visualizarDatos(vector,n); | |
}else{ | |
printf("Ordenación QuickSort ----> "); | |
qsort((int *)vector ,n,sizeof(int),&desc); | |
visualizarDatos(vector,n); | |
} | |
break; | |
} | |
}while(opc!=0); | |
/*Liberar Memoria*/ | |
free(vector); | |
return 0; | |
} | |
int *reservaMemoria(int n){ | |
int *aux; | |
aux=(int *)malloc(sizeof(int)*n); | |
return aux; | |
} | |
void introducirDatos(int *vector, int n){ | |
int i; | |
for (i = 0; i < n; ++i) | |
vector[i]=rand()%11; | |
} | |
void visualizarDatos(int *vector, int n){ | |
int i=0; | |
if(n>=0){ | |
visualizarDatos(vector,n-1); | |
printf("[%d] ",vector[n]); | |
} | |
} | |
int asc(const void *e1 ,const void *e2) { | |
int *a,*b; | |
a=(int *)e1; | |
b=(int *)e2; | |
if(*a > *b) | |
return 1; | |
else if(*a == *b) | |
return 0; | |
else | |
return -1; | |
} | |
int desc(const void *e1 ,const void *e2) { | |
int *a,*b; | |
a=(int *)e1; | |
b=(int *)e2; | |
if(*a < *b) | |
return 1; | |
else if(*a == *b) | |
return 0; | |
else | |
return -1; | |
} | |
void imprimir(int n){printf("Has introducido %d datos comprendidos entre [1-10]",n);} |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment