基本思想:仿照快速排序思想,基于枢轴将n个整数划分处理。

若i=n/2,则分组完成,算法结束

若i<n/2,则枢轴前元素均属于a1,继续对i以后的元素进行划分

若i>n/2,则枢轴之后的元素均属于a2,继续对i以前的元素进行划分

int set_partition(int a[],int n)
{
    int pivotkey,low=0,low0=0,high=n-1,high0=n-1,flag=1,k=n/2,i;
    int s1=0,s2=0;
    while(flag)//选择枢轴
    {
        pivotkey=a[0];
        while(low<high)
        {
            while(low<high&&a[high]>=pivotkey)--high;
            if(low!=high)a[low]=a[high];
            while(low<high&&a[low]<=pivotkey)++low;
            if(low!=high)a[high]=a[low];

        }
        a[low]=pivotkey;
        if(low==k-1)//如果枢轴是n/2小元素,则划分成功
            flag=0;
        else{
            if(low<k-1)
            {
                low0=++low;
                high=high0;
            }
            else{
                high0=--high;
                low=low0;
            }
        }
    }
    for(i=0;i<k;i++)s1+=a[i];
    for(i=0;i<k;i++)s2+=a[i];
    return s2-s1;
}

  

01-14 05:53