Работайте с массивом как с одномерным. Занумеруйте его так: первые индексы - это первый столбец сверху вниз. Потом идут индексы с ячейками второго столбца и т.д.
Вам осталось по одному числу - индексу в этом виртуальном одномерном массиве получать индексы исходного двумерного массива.
Номер столбца будет i / M
, Где M - количество строк. Номер строки будет i % M
.
Вам надо только написать алгоритм сортировки одномерного массива и везде, где там идет обращение к [i], вам надо сделать [i % M][i / M].