C/Visual C - ¿Como ordenar alfabeticamente?

 
Vista:

¿Como ordenar alfabeticamente?

Publicado por Elideth (3 intervenciones) el 19/10/2000 00:00:00
Hola, necesito ayuda urgente para saber como acomodar alfabeticamente una lista de nombres utilizando arreglos bidimensionales y tambien como realizar una busqueda binaria sobre estos.
Por favor, si alguien tiene idea de como se hace esto, ayudenme y 100000000 de gracias por anticipado
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:¿Como ordenar alfabeticamente?

Publicado por Endos (143 intervenciones) el 19/10/2000 00:00:00
Ordenar:

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

int sort_function( const void *a, const void *b);
char list[5][4] = { "cat", "car", "cab", "cap", "can" };

int main(void)
{
int x;

qsort((void *)list, 5, sizeof(list[0]), sort_function);
for (x = 0; x < 5; x++)
printf("%s\n", list[x]);
return 0;
}

int sort_function( const void *a, const void *b)
{
return( strcmp((char *)a,(char *)b) );
}

----

Para buscar solo tienes que hacer un strcmp() dentro de un bucle con cada
elemento mirando si es el que buscas.

char *BUSCADO="cat";

int main(void)
{
int x;

for (x = 0; x < 5; x++)
if(!strcmp(list[x], BUSCADO))
{
printf("Encontrado %s en la posicion %u del arreglo\n",BUSCADO,x);
return 0;
}

printf("Cadena no se encuentra\n");

return 0;
}

Saludos,
Endos.
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:¿Como ordenar alfabeticamente?

Publicado por Pedro Pablo (37 intervenciones) el 19/10/2000 00:00:00
La búsqueda binaria mira en el centro del vector. Si el nombre es mayor alfabéticamente que el buscado, mira en el lado izquierdo, y si no, en el lado derecho. Para mirar en cada uno de esos lados repite la operación (comprueba el nombre buscado con el del centro, y comprueba en uno u otro lado). Eso puede hacerse porque la lista está ordenada.
Para programarlo lo más cómodo es usar recursión, aunque es posible realizarlo con un simple bucle.
Te mando un ejemplo de recursión, que busca un número en un array ordenado de números. Si lo encuentra, devuelve la posición en el array del número, y si no, devuelve -1. Pasarlo a tu caso con cadenas no debería ser muy dificil, y, si tienes ganas, hasta puedes pasarlo a un bucle...


int buscar_binario(int buscado, int min, int max, int *numeros) {

int aux;

if (min == max)
if (numeros[min] == buscado)
return min;
else
return -1;

if min > max
return -1;

aux = (max + min) / 2;
if (numeros[aux] > buscado)
return buscar_binario(buscado, min, aux-1);
else
return buscar_binario(buscado, aux, max);

}

P.D. No lo he probado, pero parece que funciona...
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:¿Como ordenar alfabeticamente?

Publicado por Endos (143 intervenciones) el 19/10/2000 00:00:00
Tienes razon. Incluso olvide que hay una funcion ANSI que lo hace
por nosotros: bsearch()

Saludos,
Endos.
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