行排序问题

行排序问题_第1张图片

#include

void rowSort(int n, int matrix[][10]) {
    // 计算每行的平均值并记录在avg数组中
    float avg[10];
    for (int i = 0; i < n; i++) {
        avg[i] = 0;
        for (int j = 0; j < n; j++) {
            avg[i] += matrix[i][j];
        }
        avg[i] /= n;
    }

    // 冒泡排序,根据平均值对行进行排序
    for (int i = 0; i < n - 1; i++) {
        for (int j = 0; j < n - i - 1; j++) {
            if (avg[j] > avg[j + 1]) {
                // 交换行
                for (int k = 0; k < n; k++) {
                    int temp = matrix[j][k];
                    matrix[j][k] = matrix[j + 1][k];
                    matrix[j + 1][k] = temp;
                }

                // 交换平均值
                float temp_avg = avg[j];
                avg[j] = avg[j + 1];
                avg[j + 1] = temp_avg;
            }
        }
    }
}

int main() {
    int n;
    scanf("%d", &n);

    int matrix[10][10];

    // 输入矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            scanf("%d", &matrix[i][j]);
        }
    }

    // 调用函数排序矩阵
    rowSort(n, matrix);

    // 输出排序后的矩阵
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%d ", matrix[i][j]);
        }
        printf("\n");
    }

    return 0;
}

这里有两个嵌套的循环,外层循环 i 控制了比较的轮数,内层循环 j 控制了每一轮比较的次数。在内层循环中,通过比较 avg[j]avg[j + 1] 的大小,如果前者大于后者,就进行交换。同时,也交换了对应的行。

所以,这段代码实现了一个冒泡排序的算法,通过比较平均值并交换行,最终使得整个矩阵按照每行元素的平均值升序排列。

你可能感兴趣的:(算法,数据结构)