由牛客上一道简单算法题推广出来的似乎可解问题

由牛客上一道简单算法题推广出来的似乎可解问题
先来看原题:比赛需要两人一队组队参加,他们不知道怎么分组。已知他们的 CrossFire 分数分别为 a, b, c, d,现在想要把他们两两分为一队,使得他们的实力比较平均,也就是两队的实力差尽量小。

这里定义两队的实力差为每队的 CrossFire 分数之和的差值,现在他们想要知道这个实力差最小是多少。
示例:
输入:2 1 3 4
输出:0

下面附上我的代码:

#include
#include
int main(void)
{
    int sum,i,j,num[4]={0},sum1=0,mincha=10000,t;
    for(i=0,sum=0;i<4;i++)
    {
        scanf("%d",num+i);
        sum+=num[i];
    }
    for(i=0;i<4;i++,sum1=0)
        for(j=0;j<4&&j!=i;j++)
        {
            sum1+=(num[i]+num[j]);
            t=fabs(2*sum1-sum);
            if(tprintf("%d",mincha);
    return 0;
}

再来看问题的延伸推广:
输入2n个数,你的任务是:求出其中任意n个数的和sum1,求出剩下的n个数的和sum2,使得sum1与sum2的差的绝对值最小并将其输出。
由于本人算法实在很弱,所以恳请网友能留下一些真知灼见,如果有可实现代码(最好是c)那再好不过。

先把2n个数排序,然后sum1去拿最大最小俩个数,去掉这俩个数,sum2再去拿新的最大最小俩个数