c语言程序设计实例

编写函数void sortsum(int a[],int i),其功能是根据数组中每个元素
的各位数字之和,按从大往小次序,对a数组中的整数进行排序,然后编写
main函数调用sortsum函数,并输出排序后的结果。

例如,测试数据为 256,18,37,1024,100,29,51,991,32,3,
输出结果为 991,256,29,37,18,1024, 51,32,3, 100

第1个回答  2009-05-06
#include <stdio.h>
#define N 100
void SortSum(int a[],int i);
void main()
{
int a[N],i,n;
printf("请输入数组个数:");
scanf("%d",&n);
for(i=0;i<n;i++)
scanf("%d",&a[i]);
SortSum(a,n);
}
void SortSum(int a[],int i)
{
int j,k,m,b[N],n,s,tmp;
for(j=0;j<i;j++)
{
n=a[j];
s=0;
while(n!=0)
{
s+=n%10;
n/=10;
}
b[j]=s;
}
printf("转换后数组如下:\n");
for(j=0;j<i;j++)
{
m=j;
for(k=j+1;k<i;k++)
{
if(b[k]>b[m])
m=k;
}
if(m!=j)
{
tmp=b[j];
b[j]=b[m];
b[m]=tmp;

tmp=a[j];
a[j]=a[m];
a[m]=tmp;
}
}
for(j=0;j<i;j++)
printf("%d ",a[j]);
printf("\n");
}
------------------------------------
呵呵,我用的是选择法排序,楼上的也不错啊本回答被提问者采纳
第2个回答  2009-05-06
#include<stdio.h>
void sortsum(int a[],int i)
{
int tem[2],t;
int j,k;

for(j=0;j<i;j++)
for(k=0;k<j;k++)
{
t=a[k];tem[0]=0;
while(t>0)
{

tem[0]=t%10+tem[0];
t=t/10;

}
t=a[k+1];tem[1]=0;
while(t>0)
{

tem[1]=t%10+tem[1];
t=t/10;

}
if(tem[0]<tem[1])
{
t=a[k];a[k]=a[k+1];a[k+1]=t;

}

}
}
void main()
{
int a[10]={256,18,37,1024,1002,9,51,991,32,3};
int i=10,k;
sortsum(a, i);
for(k=0;k<i;k++)
printf("%d ",a[k]);

}