Сортировка не имеет смысла для двумерного массива ... или нет?
Ваша задача - взять входную сетку и применить к ней алгоритм, подобный пузырьковой сортировке, пока все значения в сетке не будут уменьшаться слева направо и сверху вниз по каждой строке и столбцу.
Алгоритм работает следующим образом:
- Каждый проход идет строка за строкой сверху вниз, сравнивая / меняя каждую ячейку с ее правыми и нижними соседями.
- если ячейка больше, чем только один из ее правых и нижних соседей, поменяйте местами с той, что больше
- если ячейка больше, чем ее правые и нижние соседи, поменяйте местами с меньшим соседом
- если ячейка больше, чем ее правые и нижние соседи, которые имеют одинаковое значение, то поменяйте местами с нижним соседом.
- если ячейка не больше, чем любой из ее правых и ниже соседей, ничего не делать
- Продолжайте до тех пор, пока на протяжении всего прохода не будет выполнено никаких перестановок. Это будет, когда все строки и столбцы расположены по порядку, слева направо и сверху вниз.
пример
4 2 1
3 3 5
7 2 1
Первый ряд прохода поменяет 4 и 2, затем 4 с 1.
2 1 4
3 3 5
7 2 1
Когда мы получим середину 3, она поменяется местами с 2 ниже
2 1 4
3 2 5
7 3 1
Затем 5 меняется местами с 1 ниже
2 1 4
3 2 1
7 3 5
Последний ряд первого прохода перемещает 7 полностью вправо
2 1 4
3 2 1
3 5 7
Затем мы снова возвращаемся в верхний ряд
1 2 1
3 2 4
3 5 7
И продолжайте построчно ...
1 2 1
2 3 4
3 5 7
... пока сетка не "отсортирована"
1 1 2
2 3 4
3 5 7
Другой пример
3 1 1
1 1 1
1 8 9
становится
1 1 1
1 1 1
3 8 9
скорее, чем
1 1 1
1 1 3
1 8 9
потому что нисходящий своп имеет приоритет, когда и правые, и нижние соседи ячейки равны.
Пошаговую справочную реализацию можно найти здесь .
Контрольные примеры
5 3 2 6 7 3 1 0
3 2 1 9 9 8 3 0
3 2 2 8 9 8 7 6
становится
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
становится
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
правила
- Вы можете взять входную сетку в любом удобном формате
- Можно предположить, что все значения сетки представляют собой неотрицательные целые числа в 16-разрядном диапазоне без знака (0-65535).
- Вы можете предположить, что сетка представляет собой идеальный прямоугольник, а не зубчатый массив. Сетка будет не менее 2х2.
- Если вы используете другой алгоритм сортировки, вы должны предоставить доказательство того, что он всегда будет производить тот же результирующий порядок, что и конкретный бренд двумерной пузырьковой сортировки, независимо от того, какой будет ввод. Я ожидаю, что это будет нетривиальным доказательством, поэтому вам лучше использовать описанный алгоритм.
Счастливого гольфа!