Cómo ordenar matrices multidimensionales
Sin embargo, ordenar cada columna no se puede hacer directamente como una matriz unidimensional. Sin embargo, la j-ésima columna a[0...M-1][j] todavía se puede ordenar lógicamente como una matriz unidimensional. Tomemos como ejemplo la clasificación de burbujas.
Después de ordenar la matriz bidimensional por columnas, se muestra además cómo llamar a la función de clasificación rápida para ordenar por filas.
Código fuente del programa:
#Contiene? ltstdio.h gt
#¿Contiene? ltstdlib.h gt
#¿Definición? ¿metro? Tres
¿#Definición? ¿norte? 3
//¿La función que genera una matriz bidimensional
no es válida? print(int?a[][N])
{
int? Yo, j;
for(I = 0; i ltm; i )
{
for(j = 0; j ltn; j ) p>
{
printf("d?",a[I][j]);
}
printf(" \ n " );
}?
}
//función cmp de qsort
int? cmp(constante?void*a,?const?void?*b)
{
¿Devolver? *(int *)a-*(int *)b;
}
int? main(int?argc,?char*?argv)
{
int? a[M][N]={3, 2, 1, 9, 8, 7, 6, 5, 4};
Printf("La matriz bidimensional antes de ordenar por columna es:\ n ");
Imprimir (una copia);
printf(" \ n ");
int? j;
for(j = 0;j ltn;J)//¿Ordenar cada columna en orden ascendente?
{
//¿Ordenar columna j?
int? m, n;
int? t;
for(M = M-1; m gt0; m -)
{
for(n = 0; n ltm; n )
{
if(a[n][j] gt; a[n 1][j])
{
t = a[n][j];
a[n][j]= a[n 1][j];
a[n 1][j]= t ;
}
}?
}?
}?
Printf("Matriz bidimensional presione Después de ordenar las columnas, se convierte en: \ n ");
Imprimir (una copia);
printf(" \ n ");?
//¿Ordenar una matriz bidimensional ordenada por columnas en orden ascendente de filas? (¿Llamando a la función de clasificación rápida)?
int? i;
for(I = 0;iltm;i)
{
qsort(a[i], N, tamaño de(a[i] [ 0]), CMP);
}?
Printf("Primero ordene por columna, luego por fila, la matriz bidimensional se convierte en:\n ");
p>Imprimir(una copia);
printf("\n");
Sistema("pausa");
¿Volver? 0;
}
Los resultados después de la compilación y ejecución son los siguientes:
El código fuente del programa y el programa ejecutable compilado se han empaquetado en el archivo adjunto y se pueden descargarse directamente y ejecutarse.