1 #include<stdio.h>
2
3 int main()
4 {
5 int a[5] = {3,5,6,1,4};
6 int b[5] = {1,9,12,4,3};
7 int c[10];
8
9 int i,j = 0;
10 int k;
11 int tmp;
12 int flag;
13
14 //合并ab到c
15 for(i = 0; i < 5; i++)
16 c[j++] = a[i];
17
18 for(i = 0; i < 5; i++)
19 c[j++] = b[i];
20
21
22 //排序c
23 for(i = 0; i < 10; i++)
24 {
25 j = i;
26 for(k = i + 1; k < 10; k++)
27 {
28 if(c[j] > c[k])
29 j = k;
30 }
31
32 if(j != i){
33 tmp = c[j];
34 c[j] = c[i];
35 c[i] = tmp;
36 }
37 }
38
39
40
41 //用取头尾的方式对ab进行重新赋值
42 j = 0;
43 k = 0;
44 flag = 0; //创建一个标志
45 for(i = 0; i < 10 / 2; i++){ //一次循环只能执行一次取头取尾,取完就要跳出
46 if(j != 5){
47 a[j++] = c[i]; //因为数组ab的长度都是5,而1取头尾的方法一次性取了两个,所以需要一个标志
48 flag = 0;
49 }
50 if(j != 5){
51 a[j++] = c[10 - i - 1];
52 flag = 1;
53 continue; //当a已经存满后并且已经取过尾了,要跳出此次循环,避免下面的b数组重复取数
54 }
55
56 //对两个标志和数组长度进行判断
57 if(j == 5 && k != 5 && flag == 0){
58
59 b[k++] = c[10 - i - 1];
60 flag = 1; //因为上个语句是在a取完头之后数组满了,需要数组b取尾,此语句只能执行一次,所以要修改标志,并跳出此次循环
61 continue;
62 }
63 if(j == 5 && k != 5 && flag == 1){
64 b[k++] = c[i];
65 b[k++] = c[10 - i - 1];
66 }
67 }
68
69 for(i = 0; i < 10; i++) //打印合并并排好序的数组c
70 printf("%d\t",c[i]);
71
72 putchar('\n');
73
74 for(i = 0; i < 5; i++){ //打印重新分配的数组a
75 printf("%d\t",a[i]);
76 }
77
78 putchar('\n');
79
80 for(i = 0; i < 5; i++) //打印重新分配的数组b
81 printf("%d\t",b[i]);
82 }