Я пытаюсь понять, ниже код, который переставляет матрицу на строки х цвТранспонирование матрицы: Как этот код транспонирования матрицы
int transpose(int* a, int row, int col)
{
for(int i = 0; i < row*col; i++)
{
int old = i;
do
{
old = (old%row)*col + old/row;
}
while(old < i)
swap(a[i],a[old])
}
}
Что эта линия (old = (old%row)*col + old/row)
делает?
По-видимому, внешняя петля итерации по всем элементам матрицы. Однако не каждый элемент должен быть обменен со своим партнером; Мне это трудно понять. Я нахожу это немного странным, что, очевидно, значение 'old' не может измениться по мере повторения цикла while. – Codor
Это следующие перестановочные циклы. См. Здесь: https://en.wikipedia.org/wiki/In-place_matrix_transposition – samgak
Первый и последний элементы останутся на своем месте. Другие элементы будут обмениваться. То, что я понял до сих пор, для каждого элемента a [i] мы пытаемся найти его старое положение и поменять его – Bhuwan