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