Очень эффективный способ перестановки массива чисел, каждый индекс которого уникален, исходит от обработки изображений и используется при применении таких методов, как растворение пикселей.
По сути, вы начинаете с упорядоченного 2D-массива, а затем смещаете столбцы и строки. Эти перестановки, кстати, легко реализовать, у вас может быть даже один точный метод, который даст результирующее значение в x, y после n перестановок.
Основная техника, описанная на сетке 3x3:
1) Начните с упорядоченного списка, каждый номер может существовать только один раз
0 1 2
3 4 5
6 7 8
2) Выберите строку / столбец, который вы хотите перемешать, продвиньте его на один шаг. В этом случае я сдвигаю второй ряд вправо.
0 1 2
5 3 4
6 7 8
3) Выберите строку / столбец, который вы хотите перетасовать ... Я перенес второй столбец на один.
0 7 2
5 1 4
6 3 8
4) Выбрать ... Например, первый ряд, один слева.
2 0 7
5 1 4
6 3 8
Вы можете повторять эти шаги так часто, как хотите. Вы всегда можете сделать такое преобразование также на одномерном массиве. Таким образом, ваш результат будет сейчас [2, 0, 7, 5, 1, 4, 6, 3, 8].