Циклический сдвиг влево на 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--;
    }
}

Ответы (0 шт):