#include <stdio.h>
int main() {
int a;
printf("Enter the number of rows: ");
scanf("%d", &a);
int b;
printf("Enter the number of columns: ");
scanf("%d", &b);
int x[a][b];
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
printf("Enter element at row %d column %d: ", i + 1, j + 1);
scanf("%d", &x[i][j]);
}
}
for (int i = 0; i < a * b; i++) {
for (int j = 0; j < a; j++) {
for (int k = 0; k < b; k++) {
int crow = j;
int ccol = k;
int nrow = j;
int ncol = k + 1;
if (ncol == b) {
nrow = j + 1;
ncol = 0;
}
if (crow > nrow) {
if (x[crow][ccol] > x[nrow][ncol]) {
int temp = x[crow][ccol];
x[crow][ccol] = x[nrow][ncol];
x[nrow][ncol] = temp;
}
}
}
}
}
printf("Sorted matrix:\n");
for (int i = 0; i < a; i++) {
for (int j = 0; j < b; j++) {
printf("%d ", x[i][j]);
}
printf("\n");
}
return 0;
}
我正在尝试使用 C 中的冒泡排序算法对 2D 矩阵进行排序。该程序编译并运行没有错误,但它没有产生预期的排序结果。相反,它似乎按原样打印原始矩阵。
我已经仔细检查了我的代码,但似乎找不到问题。有人可以检查我的代码并帮助我理解排序算法出了什么问题吗?
我相信你的 if 陈述是正确的:
if (crow > nrow)
因为根据定义,
crow
永远不能大于nrow
。 crow = j
和 nrow = j
或 nrow = j + 1
所以在所有情况下都是 crow <= nrow
。因此,您的 if 语句永远不会被检查。
此外,当
k == b - 1
和 j == b - 1
又称为最后一行和最后一列时,您会错过边缘情况。在这种情况下,nrow 将循环到不存在的下一行。
希望这可以帮助您走得更远!