两个数组int a[m],b[n]。他们分别是有序的,a足够长(共m + n元素,末尾有n空位),请把它们归并到数组a中
采用从后往前merge的方法:merge的思路定义:i,j,k,分别指向三个地方。
#include<stdio.h> void merge(int *a,int *b,int m,int n); main() { int a[10],b[4]; int i,m=6,n=4; printf("请输入两个有序数列:\n"); for(i=0; i<m; i++) scanf("%d",&a[i]); for(i=0; i<n; i++) scanf("%d",&b[i]); merge(a,b,m,n); printf("归并后的数组:"); for(i=0; i<m+n; i++) printf("%d",a[i]); printf("\n"); } void merge(int *a,int *b,int m,int n) { int i,j,k; i=m-1; j=n-1; k=m+n-1; while(i>=0 && j>=0){ if(a[i]>b[j]){ a[k]=a[i]; i--; } else{ a[k]=b[j]; j--; } k--; } while(i>=0){ a[k]=a[i]; a[k]=a[i]; i--; k--; } while(j>=0){ a[k]=b[j]; j--; k--; } }