我这写的就是一般冒泡排序,做参照吧。
#include
#include
int **creatList(int m,int n);//创建矩阵
void px(int **list,int m,int n);//按照每行从小到大,各行和从小到大排序
void printfList(int **list,int m,int n);//打印矩阵
int main()
{
int ** list=NULL,m,n;
while(1)
{
printf("输入m,n的值:(1≤m, n≤20)");
scanf("%d%d",&m,&n);
if(m<1 || n>20)
printf("error!\n请重新");
else
break;
}
list=creatList(m,n);
printf("输入的矩阵为:\n");
printfList(list,m,n);
px(list,m,n);
printf("排序后的矩阵为:\n");
printfList(list,m,n);
return 0;
}
void printfList(int **list,int m,int n)
{
int i,j;
for(i=0;i{
for(j=0;jprintf("%d ",list[i][j]);
printf("\n");
}
}
void px(int **list,int m,int n)
{
int i,j,k,*rowSave=NULL;
for(i=0;ifor(j=0;j {
for(k=j+1;kif(list[i][j]>list[i][k])
{
list[i][j]^=list[i][k];
list[i][k]^=list[i][j];
list[i][j]^=list[i][k];
}
}
for(i=0;ifor(j=i+1;j if(list[i][n]>list[j][n])
{
rowSave=list[i];
list[i]=list[j];
list[j]=rowSave;
}
printf("矩阵已重新排序!\n");
}
int **creatList(int m,int n)//创建矩阵
{
int **list=NULL,*rowNew=NULL;
int i,j;
list=(int **)malloc(sizeof(int *)*m);
printf("输入%d行%d列的矩阵数值:\n",m,n);
for(i=0;i{
rowNew=(int *)malloc(sizeof(int)*n+1);//最后一列保存一行的和
rowNew[n]=0;
for(j=0;j{
scanf("%d",&rowNew[j]);
rowNew[n]+=rowNew[j];
}
list[i]=rowNew;
}
return list;
}