Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Ordenación de datos vinculados

Estas en el tema de Ordenación de datos vinculados en el foro de C/C++ en Foros del Web. Hola, recién estoy aprendiendo a programar y no tengo muy claro lo de la ordenación, en todos los ejemplos que he visto, solo veo que ...
  #1 (permalink)  
Antiguo 10/02/2010, 17:41
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 3 meses
Puntos: 0
Pregunta Ordenación de datos vinculados

Hola, recién estoy aprendiendo a programar y no tengo muy claro lo de la ordenación, en todos los ejemplos que he visto, solo veo que hacen la ordenación de un solo dato, pero que pasa si un dato ordenado necesita ser mostrado junto a otro, por ejemplo ordenar el tiempo total de un ciclista en varias etapas, y al mostrar los tiempos totales ordenados, mostrar también a qué ciclista corresponde ese tiempo. No sé cómo hacer lo último, alguna idea de cómo se puede hacer?, esto es lo que he hecho hasta ahora:

Gracias de antemano!



Código c:
Ver original
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. void quicksort (int AcumEtapa[], int inf, int sup) ;
  5.  
  6. int main()
  7. {
  8.  
  9. int ciclista, etapa, i;
  10.  
  11. //Guarda en un array el tiempo de cada un de las etapas de cada uno de los ciclistas.
  12.  
  13. int Array_Vuelta[3][5];
  14.  
  15.  
  16.     for (ciclista=0; ciclista<3; ciclista++){
  17.         for (etapa=0; etapa<5; etapa++){
  18.                 printf("Ciclista %d - etapa %d: ", ciclista, etapa);    
  19.                 scanf("%d", &Array_Vuelta[ciclista][etapa]);
  20.         }
  21.         printf("\n");        
  22.     }
  23.  
  24.  
  25.  
  26.  
  27. printf("\n\n");
  28.  
  29.  
  30. int AcumEtapa[3];    
  31. int num=0;
  32.  
  33. //Guarda el acumulado del tiempo en cada una de las etapas
  34.     for (ciclista=0; ciclista<3; ciclista++){
  35.         AcumEtapa[num]=0;
  36.         for (etapa=0; etapa<5; etapa++){
  37.              AcumEtapa[num]+=Array_Vuelta[ciclista][etapa];            
  38.         }
  39.         num++;
  40.     }
  41.  
  42.  
  43. //Muestra el tiempo total de cada ciclista
  44.     for (i=0; i<3; i++){
  45.         printf("Ciclista %d - Total Etapa: %d", i, AcumEtapa[i]);
  46.         printf("\n");
  47.     }  
  48.  
  49.  
  50. printf("\n\n");
  51.  
  52.  
  53. //llama a la funcion quicksort para ordenar los datos
  54.      quicksort(AcumEtapa, 0, 3);
  55.  
  56.  
  57. //Muestra el tiempo total de cada ciclista ya ordenado
  58.      for (i=0; i<3; i++)  
  59.           printf ("\n\tElemento[%d] = %d", i, AcumEtapa[i]);  
  60.  
  61.  
  62. printf("\n\n");
  63.  
  64.  
  65.   system("PAUSE"); 
  66.   return 0;
  67. }
  68.  
  69.  
  70.  
  71.  
  72.  
  73. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://
  74. void quicksort (int AcumEtapa[], int inf, int sup)  
  75. {  
  76.      int elem_div = AcumEtapa[sup];  
  77.      int temp ;  
  78.      int i = inf - 1, j = sup;  
  79.      int cont = 1;  
  80.  
  81.      if (inf >= sup)     /* Se cruzaron los indices ? */  
  82.           return;  
  83.  
  84.      while (cont)  
  85.           {  
  86.           while (AcumEtapa[++i] < elem_div);  
  87.           while (AcumEtapa[--j] > elem_div);  
  88.           /* Se cumple la condicion ? */  
  89.           if (i < j)  
  90.                {  
  91.                temp = AcumEtapa[i];  
  92.                AcumEtapa[i] = AcumEtapa[j];  
  93.                AcumEtapa[j] = temp;  
  94.                }  
  95.           else  
  96.               cont = 0;  
  97.           }  
  98.  
  99.      /* Dejamos el elemento de divisi¢n en su posici¢n final */  
  100.      temp = AcumEtapa[i];  
  101.      AcumEtapa[i] = AcumEtapa[sup];  
  102.      AcumEtapa[sup] = temp;  
  103.  
  104.      /* Aplicamos recursivamente a los subAcumEtapas generados */  
  105.      quicksort (AcumEtapa, inf, i - 1);  
  106.      quicksort (AcumEtapa, i + 1, sup);  
  107. }
  108. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://
  #2 (permalink)  
Antiguo 12/02/2010, 11:56
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Ordenación de datos vinculados

Podes tener una estructura que contenga el tiempo, nombre del ciclista
y luego ordenas de acuerdo al tiempo!!
  #3 (permalink)  
Antiguo 12/02/2010, 16:29
 
Fecha de Ingreso: enero-2010
Mensajes: 25
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Ordenación de datos vinculados

Código C:
Ver original
  1. #include<stdio.h>
  2. #include<stdlib.h>
  3.  
  4. typedef struct ciclista{
  5.         char nombre[30];
  6.         float tiempo;
  7. }Ciclista;
  8.  
  9. Ciclista *ciclistas; //lista de ciclistas
  10. int n; //longitud de ciclistas
  11.  
  12. void ordenar(){
  13.     int i, j, salto;
  14.     Ciclista tmp;
  15.     for(i = 0; i < n; i++){
  16.         for(j = 0; j < n - i; j++){
  17.             if(ciclistas[j].tiempo > ciclistas[j + 1].tiempo){
  18.                 tmp = ciclistas[j];
  19.                 ciclistas[j] = ciclistas[j+1];
  20.                 ciclistas[j+1] = tmp;
  21.             }
  22.         }
  23.     }                      
  24. }
  25.  
  26. int main(){
  27.     int i;
  28.     printf("\nIngrese la cantidad de ciclistas: ");
  29.     scanf("%d", &n);
  30.     while(n < 0){
  31.         printf("\nIngrese una cantidad valida.");
  32.         printf("\nIngrese la cantidad de ciclistas: ");
  33.         scanf("%d", &n);    
  34.    }
  35.    ciclistas = (Ciclista *)malloc(sizeof(Ciclista) * n);
  36.    printf("\nCarga los datos de los ciclistas");
  37.    for(i = 0; i < n; i++){
  38.        printf("\nIngrese nombre: ");
  39.        scanf("\n%[^\n]s", ciclistas[i].nombre);
  40.        printf("\nIngrese tiempo: ");
  41.        scanf("%f", &ciclistas[i].tiempo);
  42.    }
  43.    ordenar();
  44.    for(i = 0; i < n; i++){
  45.        printf("\n%d- %s %.2f", i, ciclistas[i].nombre, ciclistas[i].tiempo);
  46.    }
  47.    printf("\n");
  48.    system("PAUSE");
  49.    return 0;
  50. }
  #4 (permalink)  
Antiguo 17/02/2010, 16:25
Avatar de Godiecar  
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 14 años, 3 meses
Puntos: 0
Respuesta: Ordenación de datos vinculados

Gracias por la info...me ha servido bastante.

Por cierto ¿el método que estas utilizando para ordenar es el de la burbuja?
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 21:43.