2016 408算法题目
基本思想:仿照快速排序思想,基于枢轴将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;
}

浙公网安备 33010602011771号