我试着用一个矩阵的行的数字之和来排序,从最高到最低,我不知道我解释的对不对,所以这里有一些照片来解释。
这就是我的代码输出的结果。基本上,它要求你输入m和n,这是矩阵的维数。在这个例子中,它是一个3x4,3行和4列。然后,矩阵应该按行排序,按行的位数之和排序。这意味着,与上图中输出的结果不同,正确的结果应该是:
我不知道如何排序这从最高到最低,我已经尝试了几个小时,但无济于事.这里是我的代码:
#include <stdio.h>
#define N 30
void main(){
double a[N][N], s[N], p;
int i, j, m, n, max;
while(1){
printf("\nm, n? ");
scanf("%d%d", &m, &n);
if(m <= 0 || m > N || n <=0 || n > N)
break;
for(i = 0; i < m; i++){
printf("%2d. row? ", i+1);
for(j = 0; j < n; scanf("%lf", &a[i][j++]));
}
for(i = 0; i < m; i++)
for(s[i] = j = 0; j < n; s[i] += a[i][j++]);
for(j = 0; j < n - 1; j++){
for(max = i, j = i+1; j < n; j++)
if(s[j] > s[max])
max = i;
if(max != j){
p = s[j];
s[j] = s[max];
s[max] = p;
for(j = 0; j < m; j++){
p = a[j][i];
a[j][i] = a[j][max];
a[j][max] = p;
}
}
}
printf("New matrix: \n");
for(i = 0; i < m; i++){
for(j = 0; j < n; printf("%8.2lf", a[i][j++]));
printf("\n");
}
for(j = 0; j < m; j++)
printf("-------------");
printf("\n");
for(j = 0; j < m; printf("%8.2f \n", s[j++]));
printf("\n");
}
}
2条答案
按热度按时间oxcyiej71#
您可以使用简单的冒泡排序算法,从最高到最低对矩阵的行进行排序。代码修改如下:
0qx6xfy62#
您可以只使用
qsort
让它处理排序和项交换,然后您只需要编写比较两行的代码。假设如下:
可以将
qsort
称为:唯一复杂的是实现比较回调函数,这里有两件事需要考虑:
qsort
我们有一个包含3个元素的数组,每个元素都是int[4]
类型,所以它传递给我们的void指针实际上是指向int[4]
类型的指针,即:int(*)[4]
.qsort
在默认情况下按升序排序,其中被认为"较小"的项最先结束,所以我们需要调整它,首先获得最大的项。示例:
sum1 < sum2
将首先放置最小的行。完整示例: