La mediana de una matriz se calcula obteniendo todos los números dentro de la matriz y pasarlos a un vector. Dentro del vector se ordenan todos los datos (Forma ascendente) y se saca el número del valor medio. Una vez obtenido este número (La mediana) se coloca en medio de la matriz y se hace el cambio de posición por el número que se encontraba en esa posición.
Supongamos que tenemos una matriz con los siguientes valores.
Entonces sacamos todos los valores de la matriz y los pasamos a un vector, quedaría de la siguiente manera.
Siguiente paso es ordenar los valores en forma ascendente (Para ello usamos el método de Burbuja).
Buscamos el valor medio del vector, en este caso el 5 y lo intercambiamos por el valor que estaba en su posición, el 12, el vector quedaría.
Al final se devuelven los datos a la matriz quedando de la siguiente manera.
Una matriz siempre tendrá un valor medio cuando el total de sus elementos sea un número impar, pero cuando los elementos son un número par, la matriz tiene dos elementos medios.
Pasamos los elementos a un vector.
Ordenamos los datos.
Obtenemos los dos valores medios, en este caso los números 8 y 9, y los intercambiamos por las posiciones de los números que antes estaban ahí, el cual son el 5 y 4, el vector quedaría.
Al final pasamos los valores a la matriz, el resultado sería.
Nota: Este tipo de operaciones sobre matrices es aplicado para el tratamiento de imágenes, ¿Interesante verdad?.
Limitaciones: Los números dentro de la matriz deben ser diferente, si hay números repetidos y resultan ser la mediana de la matriz se intercambiarán más de un valor.
package pqtMatricesTres; import javax.swing.JOptionPane; public class Mediana { public static void main(String[] args) { int filas=Integer.parseInt(JOptionPane.showInputDialog("Digita las filas de la matriz")); int columnas=Integer.parseInt(JOptionPane.showInputDialog("Digita las columnas de la matriz")); int matriz[][]=new int[filas][columnas]; for(int i=0;i<filas;i++){ for(int j=0;j<columnas;j++){ matriz[i][j]=Integer.parseInt(JOptionPane.showInputDialog("Digita un número para la posición: a["+i+"]["+j+"]"+" de la matriz")); System.out.print(matriz[i][j]+" "); } System.out.println(); } //Creando el vector int vec[]=new int[filas*columnas]; int cont=0; System.out.print("El vector tiene "); for(int i=0;i<filas;i++){ for(int j=0;j<columnas;j++){ vec[cont]=matriz[i][j]; System.out.print(vec[cont]+" "); cont++; } } //Sacamos los valores medios int val1=0, val2=0; for(int e=0;e<vec.length;e++){ //Si vec.length%2==0 entonces los elementos son par y tiene 2 valores medios if(vec.length%2==0){ val1=vec[(vec.length/2)-1]; val2=vec[vec.length/2]; }else{ val1=vec[vec.length/2]; } } System.out.println(); System.out.println("Valores medios, val1= "+val1+" , val2= "+val2); //Hacemos una copia del vector para ordenarlo y sacar los valores medios ordenados int vecAux[]=vec.clone(); //clone() copia todo el contenido del vector. //Ordenamos datos con burbuja for(int i=1;i<vecAux.length;i++){ for(int j=0;j<vecAux.length-1;j++){ if(vecAux[j]>vecAux[j+1]){ int aux; aux=vecAux[j+1]; vecAux[j+1]=vecAux[j]; vecAux[j]=aux; } } } //Sacamos los valores medios del vector ordenado System.out.print("Vector ordenado: "); int val3=0, val4=0; for(int e=0;e<vecAux.length;e++){ System.out.print(vecAux[e]+" "); //Si vec.length%2==0 entonces los elementos son par y tiene 2 valores medios if(vecAux.length%2==0){ val3=vecAux[(vecAux.length/2)-1]; val4=vecAux[vecAux.length/2]; }else{ val3=vecAux[vecAux.length/2]; } } System.out.println("\nValores medios, val3= "+val3+" , val4= "+val4); //Cambiamos el valor medio del vector auxiliar en el vector original for(int pos=0;pos<vec.length;pos++){ if(vec.length%2==0){ if(val3==vec[pos]){ vec[pos]=val1; vec[(vec.length/2)-1]=val3; }else if(val4==vec[pos]){ vec[pos]=val2; vec[vec.length/2]=val4; } }else if(val3==vec[pos]){ vec[pos]=val1; vec[vec.length/2]=val3; } } //Intercambiamos datos del vector a la matriz cont=0; for(int i=0;i<filas;i++){ for(int j=0;j<columnas;j++){ matriz[i][j]=vec[cont]; cont++; } } //Imprimimos la matriz para comprobar el cambio de números System.out.println("Datos de la matriz con cambio"); for(int m=0;m<filas;m++){ for(int n=0;n<columnas;n++){ System.out.print(matriz[m][n]+" "); } System.out.println(); } } }