/* * File: Ordena-QSort.cpp * Author: Miguel Guanira E. * * Created on 22 de octubre de 2009, 12:37 PM */ #include #include #include // Función que compara dos cadenas de caracteres para ordenar alfabéticamente int strComp(const void*v1, const void*v2){ char**s1 =(char**)v1, **s2 =(char**)v2; // Definimos s1 y s2 para no tener que trabajar con los punteros void return strcmp(*s1, *s2); // Para ordenar de mayor a menor // ==> return -strcmp(*s1, *s2); ó // ==> return strcmp(*s2, *s1); } // Función que compara dos valores enteros de menor a mayor int intComp(const void*v1, const void*v2){ int i1, i2; i1 = *(int*)v1; // Tomamos el valor apuntado por v1 y v2 i2 = *(int*)v2; return i1 - i2; // Para ordenar de mayor a menor ==> return i2- i1; } // Prototipos de funciones de entrada y salida de cadenas d ecaracteres void leeCad(char **&,int &); void imprime(char **,int); int main(void) { // Ordenamos una lista de nombres en un arreglo de caracteres char **nombre; int numDat = 0 , i; leeCad(nombre, numDat); qsort(nombre, numDat, sizeof(char*), strComp ); imprime(nombre, numDat); // Un arreglo de enteros int arr[]={34, 56, 22, 36, 12, 7, 83, 18, 63, 14}; qsort(arr, 10, sizeof(int), intComp ); printf("Los valores ordenados:\n"); for(i=0; i<10;i++) printf("%4d", arr[i]); printf("\n"); return 0; } void leeCad(char **&nombre,int &numDat){ char *auxNomb[100], cad[100]; int tam,i; while (1){ gets(cad); tam = strlen(cad); if (tam==0) break; auxNomb[numDat]=new char[tam+1]; strcpy(auxNomb[numDat],cad); numDat++; } nombre = new char*[numDat]; for(i=0; i