使用 C 中的冒泡排序对 2D 矩阵进行排序 - 未产生预期结果

问题描述 投票:0回答:1
#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 矩阵进行排序。该程序编译并运行没有错误,但它没有产生预期的排序结果。相反,它似乎按原样打印原始矩阵。

我已经仔细检查了我的代码,但似乎找不到问题。有人可以检查我的代码并帮助我理解排序算法出了什么问题吗?

matrix bubble-sort
1个回答
0
投票

我相信你的 if 陈述是正确的:

if (crow > nrow)

因为根据定义,

crow
永远不能大于
nrow
crow = j
nrow = j
nrow = j + 1
所以在所有情况下都是
crow <= nrow
。因此,您的 if 语句永远不会被检查。

此外,当

k == b - 1
j == b - 1
又称为最后一行和最后一列时,您会错过边缘情况。在这种情况下,nrow 将循环到不存在的下一行。

希望这可以帮助您走得更远!

© www.soinside.com 2019 - 2024. All rights reserved.