Red de conocimiento informático - Material del sitio web - Cómo ordenar matrices multidimensionales

Cómo ordenar matrices multidimensionales

En lenguaje C, las matrices bidimensionales se almacenan fila por fila, lo que facilita la clasificación de cada fila. Puede tratar cada fila como una matriz unidimensional y ordenarla directamente usando la función de clasificación.

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 )

{

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.