给定一个矩阵,要求按照平均值的升序进行排序

img


//题目要求如下图所示,自己想了好久还是没能解决,希望大家帮我看看

#include <stdio.h>
int main()
{
    int a[100][100],s[100]={0};
    int m,n,i,j,t,p;
    scanf("%d,%d",&m,&n);
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
            scanf("%d",&a[i][j]);
            getchar();
            s[j] += a[i][j];
        }
    }
    for(i=0;i<n-1;i++)
        for(j=0;j<n-i-1;j++)
        {
            if(s[j] > s[j+1])
            {
                t = s[j];
                s[j] = s[j+1];   
                s[j+1] = t;
                 //
                for(p=0;p<m;p++)
                {
                    t = a[p][j];
                    a[p][j] = a[p][j+1];
                    a[p][j+1] = t;
                }
            }
        }
    for(i=0;i<m;i++)
    {
        for(j=0;j<n;j++)
        {
              if(j==0)
                  printf("%d",a[i][j]);
              else
                printf(",%d",a[i][j]);
        }
        printf("\n");
    }
}

  1. 建立这样的结构:
    struct item{
    int avg;    // 列的平均值
    int index;  // 列在数组中的索引
    };
    
  2. 遍历原矩阵求出 struct item 列表;
  3. 根据avg升序排序 struct item 列表,可以自己实现排序算法,也可以调用qsort()函数,详情参考https://blog.csdn.net/ZDDWLIG/article/details/120209948.
  4. 根据排序后的 struct item 列表的index 输出原矩阵即可。