метод пузырька в матрице для строк

Где-то допустил ошибку или вовсе не правильно реализовал метод пузырька, но сам определить свой пробел не могу.

   #include <stdio.h>
#include <string.h>
#define n 3
#define m 3
int main() {
    int a[n][m], tmp;
    printf("Заполните массив: ");
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            printf("a[%d][%d] = ", i, j);
            scanf("%d", &a[i][j]);
        }
    }
        for (int i = 1; i < n-1; i++) {
            for (int j = 0; j < m; j++) {
                if (a[i][j] > a[i][j + 1]) {
                        int tmp = a[i][j];
                        a[j][j] = a[i][j + 1];
                        a[i][j + 1] = tmp;
                    }
            }
    }
    printf("Матрица имеет вид: \n");
    for (int i = 0; i < n; i++){
        for (int j = 0; j < m; j++){
            printf("%d\t", a[i][j]);
        }
        printf("\n");
    }

    return 0;
}

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

Автор решения: yagust

Было несколько ошибок, исправил и показал их в комментариях кода

#include <stdio.h> 
#include <string.h>

#define n 3

#define m 3

int main() {
int a[n][m], tmp;
printf("Заполните массив: ");
for (int p = 0; p < n; p++){
    for (int j = 0; j < m; j++){
        printf("a[%d][%d] = ", p, j);
        scanf("%d", &a[p][j]);
    }
}
for (int i = 0; i < n; i++) {
    // цикл для итерации по всем строкам
    // при i = 1 идет пропуск первой строки
    for (int j = 0; j < m-1; j++) {
        // цикл для итерации элементов строки
        //при j = 2 --> выход за границу массива, поэтому нужно идти до m-1
        for(int q = m-2;q>=j;q--){
            // идем с предпоследнего элемента массива до начала 
            if (a[i][q] > a[i][q + 1]) {
            int tmp = a[i][q];
            a[i][q] = a[i][q + 1];
            //[j][j] --> очевидно, была ошибка из-за невнимательности
            a[i][q + 1] = tmp;
            }
        }}
        
}
printf("Матрица имеет вид: \n");
for (int i = 0; i < n; i++){
    for (int j = 0; j < m; j++){
        printf("%d\t", a[i][j]);
    }
    printf("\n");
}

    return 0;
}
→ Ссылка