Формула для преобразования, изображенного на рисунке (т.е., не поворот на 90 градусов, а транспонирование):
index = 1 + [i / m] + n * (i % m)
В этой формуле индекс i меняется от 0 до size - 1 (size - размер массива), n - число столбцов (а после преобразования - строк), m - число строк (а после преобразования - столбцов), [i / m] - целая часть от деления i на m, i % m - остаток от деления i на m.
Очевидно, что m = [ (size - 1) / n ] + 1
При size = 12, n = 4 (соответственно, m = 3), получим следующую последовательность значений index:
i [i / 3] 4 * (i % 3) index
0: 1 + 0 + 4 * 0 = 1
1: 1 + 0 + 4 * 1 = 5
2: 1 + 0 + 4 * 2 = 9
3: 1 + 1 + 4 * 0 = 2
4: 1 + 1 + 4 * 1 = 6
5: 1 + 1 + 4 * 2 = 10
6: 1 + 2 + 4 * 0 = 3
7: 1 + 2 + 4 * 1 = 7
...
, т.е., как в примере работающего варианта