求解怎么写,数字排序,我的代码错哪了

题目6:数字排序
问题描述
  给定n个整数,请计算每个整数各位数字和,按各位数字和从大到小的顺序输出。
输入格式
  输入的第一行包含一个整数n,表示给定数字的个数。
  第二行包含n个整数,相邻的整数之间用一个空格分隔,表示所给定的整数。
输出格式
  输出多行,每行包含两个整数,分别表示一个给定的整数和它的各位数字和。按各位数字和递减的顺序输出。如果两个整数各位数字和相同,则先输出值较小的,然后输出值较大的。
样例输入
5
101 100 999 1234 110
样例输出
999 27
1234 10
101 2
110 2
100 1
评测用例规模与约定
  1 ≤ n ≤ 1000,给出的数都是不超过10000的非负整数。

int sum;要初始化,改为 int sum = 0;

#include<stdio.h>
int function(int n)//求各个数位之和
{
int sum;
while(n)
{
sum+=n%10;
n/=10;
}return sum;
}
int main()
{
int n; scanf("%d",&n);//输入n个数
int temp;//用于交换的中间值
int a[100];//记录每个数的值
for(int i=0;i<n;i++)//输入每个数的值
{
scanf("%d ",&a[i]);
}
for(int i=0;i<n;i++)//排序比较大小
{
for(int j=i-1;j<n-1;j++)
{
if(function(a[i])>function(a[j]))
{
temp=a[i];
a[i]=a[j];
a[j]=temp;
}
}
}
for(int i=0;i<n;i++)//如果有两个位数和一样
{
if(function(a[i])==function(a[i+1])&&a[i]>a[i+1])//输出更小的值
{
temp=a[i];
a[i]=a[i+1];
a[i+1]=temp;
}
else continue;
}
for(int i=0;i<n;i++)//输出结果
{
printf("%d %d\n",a[i],function(a[i]));
}
}

这是我写的代码,我不知道错哪了?