如何通过C中的行总和对矩阵进行排序
Posted
技术标签:
【中文标题】如何通过C中的行总和对矩阵进行排序【英文标题】:How to sort a matrix by the sum of the rows in C 【发布时间】:2020-11-24 15:39:22 【问题描述】:?
例如:
第一个矩阵是:
M1 = [1, 2, 3, 4]
[9, 10, 11, 12]
[5, 6, 7, 8]
我想得到这个(降序):
M2 = [9, 10, 11, 12]
[5, 6, 7, 8]
[1, 2, 3, 4]
第一行的总和 - 1+2+3+4=10
第二行的总和 - 9+10+11+12=42
第三行的总和 - 5+6+7+8=26
第二行的总和 > 第三行的总和 > 第一行的总和
初步实施:
#include<stdio.h>
#include<stdlib.h>
int main()
printf("***Program***\n\n");
int k=4;
int v=4;
int M[k][v], i, j, sumrow;
for(i=0; i<k; i++)
for(j=0; j<v; j++)
printf("\n%d. row element and %d. column element: ", j+1, i+1);
scanf("%d", &M[i][j]);
printf("\n\n***Print Matrix***:");
for(i=0; i<k; i++)
printf("\n");
for(j=0; j<v; j++)
printf("%d ", M[i][j]);
printf("\n\n");
for(i=0; i<k; i++)
sumrow=0;
for(j=0; j<v; j++)
sumrow+=M[i][j];
printf("\nSum of %d. row : %d", i+1, sumrow);
printf("\n\n");
提前致谢!
【问题讨论】:
你有初始实现吗? 你还在纠结什么?请关注以下问题之一:a) 正确存储矩阵 b) 对简单的整数数组进行排序 c) 确定行的总和 d) 交换两行 对于所有您没有问题的问题,请提供 @ 987654321@,让您更轻松地解决眼前的问题。 您可以编写一个可与标准 Cqsort()
函数一起使用的比较器。这并不是特别容易,尤其是因为每次比较时都必须计算每行的行总和(如果矩阵很宽,则速度很慢),并且您无法获得有用(重要)的信息,例如作为参数传递的行大小到功能。如果您正在编写自己的排序代码,则可以预先计算行和,然后对行和数组和矩阵进行并行排序。但是你没有显示你在哪里遇到问题。您需要展示您尝试过的内容并解释您遇到的问题。
以防万一这与家庭作业有关:meta.***.com/questions/334822/…
【参考方案1】:
这是一个可能的实现:
#include<stdio.h>
int sum(int *row, int size)
int s = 0;
for (size--; size >= 0; size--) s += row[size];
return s;
int main()
int matrix[3][4] = 1, 2, 3, 4,
9, 10, 11, 12,
5, 6, 7, 8;
int tmp;
printf("Before:\n");
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
printf("%d ", matrix[i][j]);
printf("\n");
// Bubble sort.
for (int i = 0; i < 2; i++)
for (int j = i + 1; j < 3; j++)
// Comparing row value.
if (sum(matrix[i], 4) > sum(matrix[j], 4))
// Swapping.
for (int k = 0; k < 4; k++)
tmp = matrix[i][k];
matrix[i][k] = matrix[j][k];
matrix[j][k] = tmp;
printf("After:\n");
for (int i = 0; i < 3; i++)
for (int j = 0; j < 4; j++)
printf("%d ", matrix[i][j]);
printf("\n");
return 0;
输出:
Before:
1 2 3 4
9 10 11 12
5 6 7 8
After:
1 2 3 4
5 6 7 8
9 10 11 12
一些见解:
我的实现基于二维数组。 使用比较功能使其更清晰。 由于这些不是指针,因此交换需要逐项进行,如果使用指针,则可以进行优化。【讨论】:
以上是关于如何通过C中的行总和对矩阵进行排序的主要内容,如果未能解决你的问题,请参考以下文章
使用vector<vector<int>> c ++按它们的总和对二维矩阵进行排序?