[C con Clase] Ordenar filas de matriz, referencia ultimo valor de la fila.

Steven Davidson srd4121 en njit.edu
Vie Sep 3 07:51:32 CEST 2010


Hola Jorge,

On 9/2/2010 11:35 AM, Jorge Vega Sanchez wrote:

[CORTE]

>
> Me surge una duda: en el algoritmo comparo posiciones pero para
> intercambiar vectores no sé como hacerlo todo de golpe, es decir no
> teniendo que ir pasnado posición a posicion.
>

No hay otra forma que ir elemento a elemento. Lo que puedes hacer es 
usar la función 'memcpy()' para no tener que escribir todo el código tú 
mismo, pero el programa va a copiar elemento a elemento.

>

[CORTE]

> NOTA:
> En mi algoritmo la fila 24 la usa como temporal para hacer el SWAP en
> el algoritmo.
>

Podrías haber creado un array temporal dentro de 'BubbleSort()'. Por 
ejemplo,

int aux[NCOLS];
...
memcpy( aux,    A[j],   NCOLS );
memcpy( A[j],   A[j+1], NCOLS );
memcpy( A[j+1], aux,    NCOLS );

[CORTE]

> void BubbleSort(int *A, int N) // Algoritmo MODIFICADO.
> {
> 	int i, j;
> 	
> 	for (i = N-1; i>  0; i--)
> 	{
> 		for (j = 0; j<  i; j++)
> 		{
> 			if (A[j][5]>  A[j+1][5])
> 			{
> 				strcpy(A[j],A[24]);
> 				strcpy(A[j+1],A[j]);   --->  Aqui radica el problema
> 				strcpy(A[24],A[j+1]);

Has mal interpretado los parámetros de 'strcpy()'. En cualquier caso, 
debería ser:

strcpy(  A[24], A[j] );
strcpy(   A[j], A[j+1] );
strcpy( A[j+1], A[24] );

> 			}
> 		}
> 	}
> }	// FIN ALGORITMO MODIFICADO.

El problema es que usas 'strcpy()' cuando seguramente lo que quieres es 
'memcpy()'. La función 'strcpy()' sirve para copiar cadenas de 
caracteres que terminan en un carácter nulo. Como usas un array de 
enteros con una cantidad fija de columnas, por lo que no deberías tener 
"caracteres nulos" y por ello 'strcpy()' no funcionará correctamente.


Espero haber aclarado la duda.

Steven





Más información sobre la lista de distribución Cconclase