5*5数组选出每列最大和最小的数,这么写冗余吗?怎样精简一下

前面的代码实现了输入数字,存入了5*5的数组中,代表5个学生5门课的成绩
下面是比大小
//每门科目中的最高和最低分
    i=0,j=0;
    for(j=0;j<COL;j++){
        i=0;//每列遍历后,i的值为最大行,所以需要归零
        max=0;//前一列循环后max归零
        min=str[i][j];//一列遍历后,下一列遍历之前min赋值为新一列第一行的元素
        for(i=0;i<RAW;i++){
            if(str[i][j]>max)
                max=str[i][j];
            if(str[i][j]<min)
                min=str[i][j];
        }
        printf("The best achievement of course%d :%d\n",j+1,max);
        printf("The Worst achievement of course%d :%d\n",j+1,min);
    }
    return 0;

}

算法复杂度上不冗余,你至少得把数组过一遍吧,没问题的。
在写起来的时候可以稍微简化一点,
min=str[i][j]没有必要等于str[i][j],可以等于一个很大的数,比如成绩不超过一百的话呢,就可以写min=100,
这样做的好处是每列遍历后i=0那个归零不需要做。

怎么都得遍历一遍,即使是调用库函数

可以参考排序算法,利用合适的算法解决

我觉得这样写会好些

    for(int j=0;j<COL;j++){
       float max=str[0][j];
       float min=str[0][j];
        for(int i=1;i<RAW;i++){
            if(str[i][j]>max)
                max=str[i][j];
            if(str[i][j]<min)
                min=str[i][j];
        }
        printf("The best achievement of course%d :%d\n",j+1,max);
        printf("The Worst achievement of course%d :%d\n",j+1,min);
    }
    return 0;

算法上没有冗余,无论怎样写需要将整个数组遍历一遍。

算法没毛病,题目是找出每列最小值,最大值,由于是找到最高最低分数,最高分数100,最低分数0如果遍历时出现这两个数,是不是就已经找到了,就没必要再继续遍历下去了。