《编程思维与实践》1032.行数据的排序
题目
思路
类似于字符串的strcmp函数,按要求写出排序函数即可.
关键在于如何处理输入的数据,由于一行数据最多50个(不包括1),所以可以开一个大小51的数组,初始化为-1,但读入的数据不为-1时存入数组.
数据大小不超过 1 0 9 10^9 109,用int存即可.
代码
#include<stdio.h>
#include<stdlib.h>
#include<ctype.h>
#include<string.h>
int cmp(const void *a,const void *b)
{
int *m=(int*)a;
int *n=(int*)b;
int i;
while(*m!=-1&&*n!=-1)
{
if(*m!=*n)
{
return *n-*m; //从大到小
}
else{
n++;
m++;
}
}
if(*n==-1&&*m!=-1)
{
return -1;
}
else
{
return 1;
}
}
int main()
{
int T;
scanf("%d",&T);
for(int i=0;i<T;i++)
{
int N;
scanf("%d",&N);
int tab[N][51]; //预留一个-1的位置
for(int j=0;j<N;j++)
{
for(int k=0;k<51;k++)
{
tab[j][k]=-1;
}
}
for(int j=0;j<N;j++)
{
int k=0;
int temp;
while(scanf("%d",&temp)&&temp!=-1)
{
tab[j][k++]=temp;
}
}
qsort(tab,N,51*sizeof(int),cmp);
for(int j=0;j<N;j++)
{
for(int k=0;tab[j][k]!=-1;k++)
{
printf("%d ",tab[j][k]);
}
printf("\n");
}
}
return 0;
}