C/C++ 如何实现按二维数组其中一列的元素大小为标准对整个数组的行进行排序?

C/C++ 如何实现按二维数组其中一列的元素大小为标准对整个数组的行进行排序?
表达的很不清楚,下面给出实例:
原始数组:
1 5 8
7 8 3
4 6 5
按第一列降序排序之后的结果:
7 8 3
4 6 5
1 5 8
写出代码
并说明这么做每一步原因

就好比每个学生3门成绩,对英语成绩进行排序。这在数据库管理中叫索引排序

#include<stdio.h>
#define N 3
#define M 3
void main() { int a[N][M]={ {1,5,8},{7,8,3},{4,6,5} },i,j,k,index[N]; 
  for ( i=0;i<N;i++ ) index[i]=i; //index数组记录原始顺序
  for ( i=0;i<N-1;i++ )
    for ( j=i+1;j<N;j++ ) //根据第0列比大小的结果交换index的顺序,即用索引排序
      if ( a[index[i]][0]<a[index[j]][0] ) { k=index[i];index[i]=index[j];index[j]=k; }
  for ( i=0;i<N;i++ ) { //这里index的顺序就是第0列大小顺序的a数组行号
    for ( j=0;j<M;j++ ) printf("%d ",a[index[i]][j]); printf("\n");
  }
}
索引的原始未排序的顺序是:0 1 2
排序后变成:1 2 0

追问

我这是二维数组啊

温馨提示:答案为网友推荐,仅供参考
第1个回答  2019-01-06
#include<stdio.h>
int main()
{float a[5][5],b,t;
int i,j,k;
printf("please enter the score:\n");
for(i=0;i<5;i++)
for(j=0;j<4;j++)
scanf("%f",&a[i][j]);
for(i=0;i<5;i++)
{b=0;
for(j=0;j<4;j++)
b=b+a[i][j];
a[i][4]=b/4;}
for(k=0;k<4;k++)
{for(i=0;i<4-k;i++)
if(a[i][4]<a[i+1][4])
{t=a[i][j];a[i][j]=a[i+1][j];a[i+1][j]=t;}}
for(i=0;i<5;i++)
for(j=0;j<5;j++)
printf("%f\n",a[i][j]);
return 0;
}
相似回答