- 论坛徽章:
- 0
|
回复 1# forrestgang
我觉得排序没有什么意义的,因为这两个数组里面的值肯定会交换,交换完了之后还是乱序的。
这是小弟我写的,自测没有什么问题。
- #include <stdlib.h>
- #include <stdio.h>
- #define ARRAY_NUM 3
- int a[ARRAY_NUM] = {1,2,3};
- int b[ARRAY_NUM] = {4,5,6};
- void swap(int* a, int* b)
- {
- int t = *a;
- *a = *b;
- *b = t;
- }
- int sum(int a[], int num)
- {
- int sum = 0;
- int i = 0;
- for(i = 0; i < num; i++)
- {
- sum += a[i];
- }
- return sum;
- }
- void func(int a[], int b[], int num)
- {
- int sum_a = sum(a, num);
- int sum_b = sum(b, num);
- int b_swap = 0;
- int i = 0;
- int j = 0;
- int sum_diff = sum_a - sum_b;
- printf("diff:%d\n", sum_diff);
- while (1)
- {
- for (i = 0; i < num; i++)
- {
- for(j = 0; j < num; j++)
- {
- int diff = a[i] - b[j];
- if (abs(sum_diff) > abs(sum_diff - (2 * diff)))
- {
- swap(a + i, b + j);
- b_swap = 1;
- sum_diff = sum_diff - (2 * diff);
- printf("diff:%d\n", sum_diff);
- break;
- }
- }
- if(b_swap > 0)
- {
- break;
- }
- }
- if (0 == b_swap)
- {
- break;
- }
- else
- {
- b_swap = 0;
- }
- }
- }
- void _print()
- {
- int i = 0;
- printf("array a:\n");
- for(i = 0; i < ARRAY_NUM; i++)
- {
- printf("%d ", a[i]);
- }
- printf("\n");
- printf("array b:\n");
- for(i = 0; i < ARRAY_NUM; i++)
- {
- printf("%d ", b[i]);
- }
- printf("\n");
- }
- int main()
- {
- printf("before:\n");
- _print();
- func(a, b, ARRAY_NUM);
- printf("\n\n");
- printf("after:\n");
- _print();
- return 0;
- }
复制代码 |
|