Cómo usar la ordenación por inserción para ordenar una matriz 2D en Java

No está realmente claro qué quiere decir con “ordenar una matriz 2D”: debe definir lo que quiere decir con “en orden”. Suponiendo que desea ordenar las filas por un valor específico en una columna, es decir

{1,2,3}
{9,5,4}
{3,4,1)

cuando col = 1 (segundo elemento)

{1,2,3}
{3,4,1}
{9,5,4}

tu harías:

inserción estática privada vacíaSortTwoDArray (int [] [] a, int size, int col) {
int cur, j;
para (int i = 1; i <tamaño; i ++) {
cur = a [i] [col];
int [] curRow = a [i];
j = i-1;
while ((j> = 0) && (a [j] [col]> cur)) {
a [j + 1] = a [j];
j–;
}
a [j + 1] = curRow;
}
}

Dado que las matrices 2D en Java son solo matrices de matrices, esto esencialmente ordena las matrices por el valor en el índice “col” en cada matriz.

Sin embargo, si lo que quiere hacer es ordenar cada matriz individual dentro de la matriz 2D, es decir

{1,2,3}
{9,5,4}
{3,4,1)

a

{1,2,3}
{4,5,9}
{1,3,4}

Luego, tratar cada “fila” en la matriz 2D como una matriz individual e implementar una clasificación de inserción “1D” será suficiente.

Convierta un índice 1D en índices de fila y columna

psn = fila * colWidth + col

donde fila y columna comienzan en cero

Ahora trabaje hacia atrás para convertir psn en una fila y col índices