题目描述
现在给你一组数字,要求你把每一个数字逆序(如 123123123 变为 321321321)之后进行排序,按从小到大的顺序排列。
输入
第一行一个数字 TTT(T<20T \lt 20T<20)表示共有 TTT 组测试数据。
下面 TTT 行:每组开始有一个数字 XXX(X<20X \lt 20X<20),表示该组有 XXX 个数字,后面是该组的 XXX(X<10000X \lt 10000X<10000)个数字。
输出
每组数据输出一行,输出按从小到大排列好的数字。
#include<stdio.h>
int fan(int a)//逆序函数 可看我的另一篇专门实现数字逆序的文章
{
int mi=1,s=0,i;//s为逆序之后的数
int k=1;
int shu = a;
while(shu / 10 != 0)
{
shu=shu/10;
k++;
}
//k为该数字的位数;
while(a/10 != 0)
{
mi = 1;
for(i=0;i<k-1;++i)
{
mi *=10;
}
k--;
s+=a%10*mi;
a=a/10;
}
s+=a;
return s;
}
void quicksort(int a[],int left,int right)//快速排序函数,可看我快速排序函数
{
int flag = a[left];
int first = left;
int last = right;
if(left>=right)
return ;
while(first<last)
{
while(first<last&&a[last]>flag)
{
last--;
}
if(first<last)
a[first++]=a[last];
while(first < last &&a[first]<flag)
{
first++;
}
if(first <last)
a[last--] = a[first];
}
a[first] = flag;
quicksort(a,left,first-1);
quicksort(a,first+1,right);
}
int main()
{
int m,i,j;
scanf("%d",&m);
for(i=0;i<m;++i)
{
int n,a[10005];
scanf("%d",&n);
for(j=0;j<n;++j)
{
scanf("%d",&a[j]);
a[j] = fan(a[j]);
}
quicksort(a,0,n-1);
for(j=0;j<n;++j)
printf("%d ",a[j]);
printf("\n");
}
}