- 论坛徽章:
- 0
|
想得太复杂了吧,根本不用排序,因为排序只会多一道操作而已,时间复杂度,还是N的平方, 把两个数组之差算出来,然后两两比较就可以了!
include <stdio.h>
#define MAX_LEN 10
int main()
{
int a[MAX_LEN];
int b[MAX_LEN];
int i, asum=0, bsum=0;
for (i=0; i<MAX_LEN; i++) {
a[i] = rand();
asum+=a[i];
b[i] = rand();
bsum+=b[i];
}
for (i=0; i<MAX_LEN; i++)
printf("%d ", a[i]);
printf("\n");
for (i=0; i<MAX_LEN; i++)
printf("%d ", b[i]);
printf("\n");
int d = asum - bsum;
printf("== %d \n", d);
if (d == 0)
goto over;
int j, d0, asum0, bsum0, temp;
for (j=0; j<MAX_LEN; j++)
for (i=0; i< MAX_LEN; i++) {
asum0 = asum - a[i] + b[j];
bsum0 = bsum - b[j] + a[i];
d0 = asum0 - bsum0;
if (abs(d0) < abs(d)) {
temp = a[i];
a[i] = b[j];
b[j] = temp;
asum = asum0;
bsum = bsum0;
d = d0;
if (d == 0)
goto over;
}
}
over:
asum = 0;
for (i=0; i<MAX_LEN; i++) {
asum+=a[i];
printf("%d ", a[i]);
}
printf("\n %d\n", asum);
bsum =0;
for (i=0; i<MAX_LEN; i++) {
bsum+=b[i];
printf("%d ", b[i]);
}
printf("\n %d\n", bsum);
printf("===== %d\n", d);
}
|
[ 本帖最后由 anthony1983 于 2007-11-23 20:30 编辑 ] |
|