Ordenar siguiendo el mismo orden dos tablas independientes

Iniciado por AIR13, 4 Enero 2013, 23:45 PM

0 Miembros y 1 Visitante están viendo este tema.

AIR13


Buenas! Felicidades por la página. Está realmente bien.

Pues el caso es que estoy con un proyecto y me he quedado anclada en una función (o método, según lo llames) cuyo objetivo es ordenar una tabla, tabla1[3][1] de menor a mayor y, luego otra, tabla2[3][1], independientemente de sus valores.

Pongo un ejemplo: si tabla1[3][1]={(3),(1),(2)} y tabla2[3][1]={(a),(b),(c)}, quiero ordenar tabla1[3][1] de menor a mayor así: {(1),(2),(3)} y poner en ese orden tabla2[3][1], de manera que quede: {(b),(c),(a)}, porque b ocupa el lugar de 1, c el de 2 y a el de 3.

Muchas gracias por adelantado :)

rir3760

Debes utilizar una tercera tabla para almacenar ahí los indices de los elementos una vez ordenados. En base a ella ya puedes imprimir la segunda tabla con el orden de la primera.

Para ejemplificar (el array ndx es la tabla de indices):
#include <stdio.h>
#include <stdlib.h>

int main(void)
{
   int num[3] = {3, 1, 2};
   int ndx[3] = {0, 1, 2}; /* Indices de los elementos */
   char ch[3] = {'a', 'b', 'c'};
   int N = 3;
   int i;
   int j;
   
   /* Ordenacion mediante BubbleSort */
   for (i = N - 1; i > 0; i--){
      for (j = 0; j < i; j++)
         if (num[ndx[j]] > num[ndx[j + 1]]){
            int aux;
           
            aux = ndx[j];
            ndx[j] = ndx[j + 1];
            ndx[j + 1] = aux;
         }
   }
   
   for (i = 0; i < N; i++)
      printf(" %c", ch[ndx[i]]);
   putchar('\n');
   
   return EXIT_SUCCESS;
}


Un saludo
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language

AIR13


Nunca se me habría ocurrido! Muchísimas gracias, de verdad! Me ha servido de mucho, rir3760 :)

Felices fiestas.

leosansan

Cita de: AIR13 en  4 Enero 2013, 23:45 PM
                   .............................................
Pongo un ejemplo: si tabla1[3][1]={(3),(1),(2)} y tabla2[3][1]={(a),(b),(c)}, quiero ordenar tabla1[3][1] de menor a mayor así: {(1),(2),(3)} y poner en ese orden tabla2[3][1], de manera que quede: {(b),(c),(a)}, porque b ocupa el lugar de 1, c el de 2 y a el de 3.

Como tienes que ordenar la tabla numérica, aprovechas y te ordena al mismo tiempo la alfabética:
Código (cpp) [Seleccionar]
#include <stdio.h>
#include <stdlib.h>

int main(void){
  int i,j,n=3,auxn,num[3] = {3, 1, 2};
  char ch[3] = {'a', 'b', 'c'},aux;
    /* Ordenacion mediante Burbuja */
    for (i=1; i< n; i++){
      for (j=0; j< n-i; j++)
         if (num[j] > num[j+1]){

            auxn =num[j];
            num[j]=num[j+1];
            num[j+1]=auxn;
            aux = ch[j];
            ch[j] = ch[j + 1];
            ch[j + 1] = aux;
        }
   }
  for (i = 0; i < n; i++)
    printf(" %d ", num[i]);
  putchar('\n');
  for (i = 0; i < n; i++)
    printf(" %c", ch[i]);
  putchar('\n');
  return EXIT_SUCCESS;
}

Saluditos!.