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 :)
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
Nunca se me habría ocurrido! Muchísimas gracias, de verdad! Me ha servido de mucho, rir3760 :)
Felices fiestas.
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:#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!.