c - 如何通过C中的行总和对矩阵进行排序
问题描述
如何按C中行的总和对矩阵进行排序?
例如:
第一个矩阵是:
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
第 2 行总和>第 3 行总和>第 1 行总和
初步实施:
#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");
}
提前致谢!
解决方案
这是一个可能的实现:
#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# - C#如何在字符串中的每个大写字符前添加连字符
- python - Python UnboundLocalError,是什么原因造成的?
- python - PyCharm 无法识别“导入随机”(Python 3.8)
- java - 使用霍纳递归将任何基数转换为十进制
- reactjs - 未定义的值
- flutter - 用户退出后仍然登录
- reactjs - Next.js 在 router.push 时保持状态或发送 props
- c++ - 在 C++ 中检查空目录时出错
- arrays - 28 个块中的 448 个字节肯定会在丢失记录 1 of 1 中丢失 - FREED 内存问题
- google-apps-script - 在 Google App Script 中复制粘贴单元格范围的最快方法