Ver Mensaje Individual
  #1 (permalink)  
Antiguo 10/02/2010, 17:41
Avatar de Godiecar
Godiecar
 
Fecha de Ingreso: febrero-2010
Mensajes: 22
Antigüedad: 15 años, 1 mes
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. //::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::://