Циклический сдвиг влево на k значений
У меня такое задание:
в матрице сдвинуть элементы строк циклическим сдвигом влево так, чтобы максимальный элемент был расположен на главной диагонали.
С нахождением максимума и самим циклическим сдвигом у меня вроде как не возникло проблем, но вот как именно расчитать шаг, на который нужно сдвинуть строку, я немного не могу понять. Можете подсказать как это лучше сделать, а то у меня k оочень криво считается, и неправильно.
Код прилагаю (он частичный, т.к. это в функции будет)
int k = 0, j_max;
float max;
for (int i = 0; i < n; i++) {
max = -1000;
for (int j = 0; j < n; j++) {
if (M[i][j] > max)
j_max = j;
}
k = 0;
if (j_max >= i) k = j_max - i;
else k = n - j_max + 1;
while(k > 0) {
for (int j = 0; j < n-1; j++){
float temp = M[i][j];
M[i][j] = M[i][j + 1];
M[i][j + 1] = temp;
}
k--;
}
}