Quicksort: Ordenar n nombres por orden lexicográfico

Rocío Aznar Gimeno

 /*Este programa ordena alfabéticamente los nombres introducidos por el usuario.
Para ello se utiliza la función Quicksort. El programa da la posibilidad además 
de volver a realizar esta acción,si se desea,con nombres diferentes.*/

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

//función que se va a utilizar para ordenar los nombres
void quicksort(char nombre[15][15],int izquierda,int derecha)
{
 int i,j;
 char y[15],*x;

 i=izquierda;
 j=derecha;
 x=nombre[(izquierda+derecha)/2];
 do{
 while((strcmp(nombre[i],x)<0) && (i<derecha)) i++; //strcmp compara lexicograficamente
 while((strcmp(nombre[j],x)>0) && (j>izquierda)) j--;
 if(i<=j)
{
 strcpy(y,nombre[i]); //copia cadena nombre[i] en y
 strcpy(nombre[i],nombre[j]);
 strcpy(nombre[j],y); //intercambia las cadenas
 i++;
 j--;
 }
 }while(i<=j);

 if(izquierda<j) quicksort(nombre,izquierda,j);
 if(i<derecha) quicksort(nombre,i,derecha);
}

int main()
{
 char nombre[15][15];
 int n,i,izquierda,derecha,respuesta;

 do{
 printf("Introduce el numero de nombres que desea ordenar alfabeticamente:\n ");
 scanf("%d",&n);
 for(i=0;i<n;i++)
 {
 printf("Introduzca el nombre de la persona %d: ",i+1);
 scanf("%s",nombre[i]);
 }//se guardan los nombres en el array
 izquierda=0;//izquierda al nombre del lugar cero
 derecha=n-1;//derecha al nombre del ultimo lugar(n-1, se empieza desde el cero)
 quicksort(nombre,izquierda,derecha);
 printf("Los nombres en orden alfabetico:\n");
 for(i=0;i<n;i++)
 printf("\n %d.-%s",i+1,nombre[i]);
//escribe los nombres por orden alfabetico precedidos por el numero
//de la posición que ocupan

 printf("\n¿Desea volver a ordenar otros nombres alfabeticamente?
          (si-pulse 1, no-pulse otra tecla)\n");
 scanf("%d",&respuesta);
 }while(respuesta==1);

 return 0;
}
Esta entrada fue publicada en Informática e Internet. Guarda el enlace permanente.

3 respuestas a Quicksort: Ordenar n nombres por orden lexicográfico

  1. Paco Martinez dijo:

    guau¡

  2. Angel dijo:

    me pueden explicar esta parte del codigo
    if(izquierda<j) quicksort(nombre,izquierda,j);
    if(i<derecha) quicksort(nombre,i,derecha);
    que es lo que hace realmente

    • La función quicksort() es recursiva: continúa haciendo su trabajo hasta que ha ordenado todos los nombres, es decir, hasta que ha agotado todos los índices posibles, esto es, hasta que el índice j rebasa por la izquierda y hasta que el índice i rebasa por la derecha.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s