|
C语言合并数组 两个有序数组合并成一个有序数组
函数void fun(int a[], int m, int b[], int n, int c[])功能是将两个已按升序排好的数组arra(共有5个数)和arrb(共有7个数)合并在数组arrc中,并使arrc仍按升序排列(注:不允许合并后再排序)。
第1组输入样例:
12 23 45 56 78
23 45 56 78 100 120 131
第1组输出样例:
12 23 23 45 45 56 56 78 78 100 120 131
第2组输入样例:
12 23 45 56 78
11 14 15 16 24 46 57
第2组输出样例:
11 12 14 15 16 23 24 45 46 56 57 78
裁判测试程序样例:
- #include <stdio.h>
- #define M 5
- #define N 7
- void fun(int a[], int m, int b[], int n, int c[]);
- int main()
- {
- int arra[M],arrb[N];
- int arrc[M+N],k;
- int i;
- for(i=0;i<M;i++)
- scanf("%d",&arra[i]);
- for(i=0;i<N;i++)
- scanf("%d",&arrb[i]);
- fun(arra,M,arrb,N,arrc);
- for(k=0;k<M+N;k++)
- printf("%d ",arrc[k]);
- printf("\n");
- return 0;
- }
-
复制代码 代码如下:
-
- #include <stdio.h>
- #define M 5
- #define N 7
- void fun(int a[], int m, int b[], int n, int c[]) {
- int i = 0, j = 0, k = 0;
- while (i < m && j < n) {
- if (a[i] <= b[j]) {
- c[k++] = a[i++];
- } else {
- c[k++] = b[j++];
- }
- }
- while (i < m) {
- c[k++] = a[i++];
- }
- while (j < n) {
- c[k++] = b[j++];
- }
- }
- int main() {
- int arra[M], arrb[N];
- int arrc[M + N], k;
- int i;
- for (i = 0; i < M; i++)
- scanf("%d", &arra[i]);
- for (i = 0; i < N; i++)
- scanf("%d", &arrb[i]);
- fun(arra, M, arrb, N, arrc);
- for (k = 0; k < M + N; k++)
- printf("%d ", arrc[k]);
- printf("\n");
- return 0;
- }
复制代码 这段代码中的 fun 函数会将两个已按升序排好的数组 a 和 b 合并到数组 c 中,并使 c 仍按升序排列。它使用了双指针的方法,从数组 a 和数组 b 的开头开始比较,将较小的元素放入数组 c 中,然后移动相应的指针。最后,将剩余的元素直接放入数组 c 中。在主函数中,输入两个数组的元素,调用 fun 函数进行合并,并输出合并后的结果。
运行结果如下:
|
|