Skip to content

Instantly share code, notes, and snippets.

@ACruz91
Created June 23, 2013 17:27
Show Gist options
  • Save ACruz91/5845795 to your computer and use it in GitHub Desktop.
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.
#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