排序问题,C++写出源代码

现在给定了n个正整数,直接排序的话实在太乏味,将每个正整数的每一位相加,然后根据每一位的和对所有的数按从小到大进行排序。注意,如果有多个数的位加和结果相同的话,那么按数本身的大小排序。比如有5个数:21 12 10 47 50,5个数的位相加结果分别为:3 3 1 11 5, 因此排序结果为:10 12 21 50 47 

供参考:

#include<stdio.h>

#define N 5

int s(int n)
{
    int s=0;
    while(n){
          s += n%10;
          n /= 10;
    }
    return s;
}

void swap(int *a,int *b)
{
    int tmp;
    tmp = *a;*a = *b;*b = tmp;
}


int main()
{
    int a[N]={21,12,10,47,50},i,j;
    for(i=0;i<N-1;i++){
        for(j=0;j<N-i-1;j++)
            if(s(a[j])> s(a[j+1])){
                swap(&a[j],&a[j+1]);
            }else if(s(a[j]) == s(a[j+1])){
                     if(a[j] > a[j+1]){
                          swap(&a[j],&a[j+1]);
                     }
            }
    }
    for(i=0;i<N;i++)
        printf("%4d",a[i]);
    
    return 0;
}