C/Visual C - Ordenamiento por alfabeto de listas AYUDAAAAAA!

 
Vista:

Ordenamiento por alfabeto de listas AYUDAAAAAA!

Publicado por Luis Alejandro (4 intervenciones) el 08/04/2001 05:24:08
Me dejaron realizar un programa que ordene, una lista de 20 apellidos y no tengo ni idea de como hacerlo, se que debe usar arreglos pero no se ni donde empezar
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Ordenamiento por alfabeto de listas AYUDAAAAAA!

Publicado por Germán B. (143 intervenciones) el 08/04/2001 06:13:18
Acá lo tenés. Lo hice con un array inicializado directamente en el programa. Al final recorro el array para mostrar cómo quedó (está listo para compilar, lo probé con TC++).
Estoy usando un método simple de ordenamiento, más que suficiente para este caso. El array es de punteros a char (o sea strings). Cuando hay que intercambiar los apellidos de 2 posiciones determinadas, uso un puntero auxiliar, y solo intercambio los punteros, no el contenido de los strings. Por si no se entiende el if, la función strcmp() retorna un valor mayor que 0 si el primer argumento es alfabéticamente "mayor" que el segundo.
Suerte
G

#include <string.h>
#include <stdio.h>

void main(void) {
char *Apellidos[20]={
"GOMEZ", "FERNANDEZ", "LOPEZ", "GONZALEZ", "RAMIREZ", "PEREZ",
"GARCIA", "GUTIERREZ", "RODRIGUEZ", "DIEGUEZ", "ESTEVEZ", "VELEZ",
"MENDEZ", "SUAREZ", "FERNANDEZ", "HERNANDEZ", "VAZQUEZ", "GALVEZ",
"NUÑEZ", "IBAÑEZ"
};
char *aux;
int i, j;

for(i=0;i<20;i++)
for(j=i+1;j<=20;j++) {
if(strcmp(Apellidos[i],Apellidos[j])>0) {
aux=Apellidos[j];
Apellidos[j]=Apellidos[i];
Apellidos[i]=aux;
}
}

for(i=0;i<20;i++)
printf("%s\n",Apellidos[i]);
}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ordenamiento por alfabeto de listas GRACIAS

Publicado por ALEJANDRO (4 intervenciones) el 09/04/2001 02:00:20
Si logre entender y compilar tu ejemplo, solo me queda una duda, de como insertar los nombres, pero solo voy a checar mis apuntes,
MIL GRACIAS
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Ordenamiento por alfabeto de listas AYUDAAAAAA!

Publicado por Emilio (42 intervenciones) el 09/04/2001 09:24:14
Aqui te mando un algoritmo considerablemente mejor que el de German, este algoritmo usa Quick sort y no Bubble sort como el de German, este algoritmo tiene un O(n log n) y el de German O (n*n) ademas que puedes ordenar todo el arreglo o solo un sector de el para eso mandas a la funcion Qsort un puntero al arreglo, el index izquierdo y el index derecho.
Por ejemplo si quieres ordenar todo el arreglo:
llamas a QSort(p_arreglo,0,n-1);
Si quieres ordenar del index 10 al 20 del arreglo:
llamas a QSort(p_arreglo,10,20)
etc...
Suerte.

void change(char **a,int l,int r)
{
char *temp;
temp=a[l];
a[l]=a[r];
a[r]=temp;
}

int part(char **a,int l,int r)
{
int left,pivot,i;
char *temp;
pivot=(l+r)/2;
temp=a[pivot];
change(a,pivot,l);
left=l;
for(i=l+1;i<=r;i++)
{
if(strcmp(temp,a[i])>0)
{
left++;
change(a,left,i);
}
}
change(a,l,left);
return left;
}

void QSort (char **a,int l,int r)
{
int i;
if(l>=r) return;
i=part(a,l,r);
QSort(a,l,i-1);
QSort(a,i+1,r);

}
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar