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

《编程思维与实践》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;
}

猜你喜欢

转载自blog.csdn.net/boxueyuki/article/details/130030426