欢迎光临散文网 会员登陆 & 注册

《编程思维与实践》1032.行数据的排序

2023-04-09 01:01 作者:风浅叶墨  | 我要投稿

题目

思路

类似于字符串的strcmp函数,按要求写出排序函数即可.

关键在于如何处理输入的数据,由于一行数据最多50个(不包括1),所以可以开一个大小51的数组,初始化为-1,但读入的数据不为-1时存入数组.

数据大小不超过10^9,用int存即可.

代码

#include<stdio.h>
#include<stdlib.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;
}


《编程思维与实践》1032.行数据的排序的评论 (共 条)

分享到微博请遵守国家法律