Итак, ваш массив структурирован следующим образом (я буду говорить в псевдокоде, потому что мой C # -fu слаб, но я надеюсь, вы понимаете суть того, что я говорю)
string values[rows][columns]
То есть value[1][3]
- это значение в строке 1, столбце 3.
Вы хотите отсортировать по столбцу, поэтому проблема в том, что ваш массив отключен на 90 градусов.
Как первый разрез, вы могли бы просто повернуть его?
std::string values_by_column[columns][rows];
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
values_by_column[column][row] = values[row][column]
sort_array(values_by_column[column])
for (int i = 0; i < rows; i++)
for (int j = 0; j < columns; j++)
values[row][column] = values_by_column[column][row]
Если вы знаете, что хотите отсортировать только один столбец за раз, вы можете оптимизировать это, просто извлекая данные, которые вы хотите отсортировать:
string values_to_sort[rows]
for (int i = 0; i < rows; i++)
values_to_sort[i] = values[i][column_to_sort]
sort_array(values_to_sort)
for (int i = 0; i < rows; i++)
values[i][column_to_sort] = values_to_sort[i]
В C ++ вы могли бы поиграть с тем, как рассчитать смещения в массиве (поскольку вы можете рассматривать ваш двумерный массив как массив с одним целым), но я не уверен, как это сделать в c #.