将一个数组分为两个不相交的子集,元素个数分别为 、 ,元素之和分别为 、 。要使 最小且 最大。
int partion(int A[],int low,int high){
int pivot=A[low];
while(low<high){
while(low < high && pivot<=A[high]){
high--;
}
A[low]=A[high];
while(low < high && pivot >=A[low]){
low++;
}
A[high]=A[low];
}
A[low]=pivot;
return low;
}
void q_sort(int A[],int low,int high){
while(low<high){
int pivot=partion(A,low,high);
q_sort(A,low,pivot-1);
q_sort(A,pivot+1,high);
}
}
int get_sum(int A[],start,end){
int sum=0;
for(int i=start;i<=end;i++){
sum+=A[i];
}
return sum;
}
int setPartion(int A[],int n){
q_sort(A);
int s1,s2;
s1=get_sum(A,0,n/2-1);
s2=get_sum(A,n/2,n-1);
return s2-s1;
}