метод пузырька в матрице для строк
Где-то допустил ошибку или вовсе не правильно реализовал метод пузырька, но сам определить свой пробел не могу.
#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;
}