Ordenar no tiene sentido para una matriz bidimensional ... ¿o sí?
Su tarea es tomar una cuadrícula de entrada y aplicarle un algoritmo de tipo burbuja hasta que todos los valores de la cuadrícula no disminuyan de izquierda a derecha y de arriba a abajo a lo largo de cada fila y columna.
El algoritmo funciona de la siguiente manera:
- Cada pase va fila por fila, de arriba abajo, comparando / intercambiando cada celda con sus vecinos derecho e inferior.
- si la celda es mayor que solo uno de sus vecinos derechos e inferiores, intercambie con el que es mayor que
- Si la celda es mayor que sus vecinos derecho e inferior, intercambie con el vecino más pequeño
- si la celda es mayor que sus vecinos derecho e inferior, que tienen el mismo valor, intercambie con el vecino inferior.
- si la celda no es mayor que cualquiera de sus vecinos derechos e inferiores, no haga nada
- Continúe esto hasta que no se realicen intercambios en todo el pase. Esto será cuando cada fila y columna estén en orden, de izquierda a derecha y de arriba a abajo.
Ejemplo
4 2 1
3 3 5
7 2 1
La primera fila del pase intercambiará el 4 y el 2, luego el 4 con el 1.
2 1 4
3 3 5
7 2 1
Cuando obtengamos el 3 del medio, se intercambiará con el 2 a continuación
2 1 4
3 2 5
7 3 1
Luego el 5 se intercambia con el 1 a continuación
2 1 4
3 2 1
7 3 5
La última fila de la primera pasada mueve el 7 completamente hacia la derecha
2 1 4
3 2 1
3 5 7
Luego volvemos a la fila superior nuevamente
1 2 1
3 2 4
3 5 7
Y continuar fila por fila ...
1 2 1
2 3 4
3 5 7
... hasta que la cuadrícula esté "ordenada"
1 1 2
2 3 4
3 5 7
Otro ejemplo
3 1 1
1 1 1
1 8 9
se convierte
1 1 1
1 1 1
3 8 9
más bien que
1 1 1
1 1 3
1 8 9
porque el intercambio hacia abajo tiene prioridad cuando los vecinos derecho e inferior de una celda son iguales.
Una implementación de referencia paso a paso se puede encontrar aquí .
Casos de prueba
5 3 2 6 7 3 1 0
3 2 1 9 9 8 3 0
3 2 2 8 9 8 7 6
se convierte
0 0 1 1 2 2 3 6
2 2 3 3 6 7 8 8
3 3 5 7 8 9 9 9
2 1 2 7 8 2 1 0
2 2 2 2 3 2 1 0
1 2 3 4 5 4 3 2
9 8 7 6 5 4 3 6
6 5 4 3 2 2 1 0
se convierte
0 0 0 1 1 1 2 2
1 1 2 2 2 2 2 2
2 2 2 2 3 3 3 3
3 4 4 4 4 5 6 6
5 5 6 7 7 8 8 9
Reglas
- Puede tomar la cuadrícula de entrada en cualquier formato conveniente
- Puede suponer que los valores de la cuadrícula son todos enteros no negativos en el rango de 16 bits sin signo (0-65535).
- Puede suponer que la cuadrícula es un rectángulo perfecto y no una matriz irregular. La cuadrícula será al menos 2x2.
- Si usa otro algoritmo de clasificación, debe proporcionar una prueba de que siempre producirá el mismo orden resultante que esta marca particular de clasificación de burbujas 2D, sin importar cuál sea la entrada. Espero que esto sea una prueba no trivial, por lo que probablemente sea mejor usar el algoritmo descrito.
¡Feliz golf!