voidmerge(int a[], int p, int q, int r) { int s,t,k; int *b; int i; b = (int*)malloc((r-p+1)*sizeof(int)); s = p; t = q+1; k = 0; while ((s<=q)&&(t<=r)) if(a[s]<=a[t]) b[k++] = a[s++]; else b[k++] = a[t++]; if(s == q + 1) while (t<=r) b[k++] = a[t++]; else while (s<=q) b[k++] = a[s++]; k = 0; while (p<=r) { printf("%3d", b[k]); a[p++] = b[k++]; } /* while (p<=r) { a[p] = b[k]; printf("%3d", b[k]); p = p + 1; k = k + 1; } */ printf("\n"); } intmain() { int N,i,p,q,r; int *a; printf("Please input the numbers of array:"); scanf("%d", &N); a = (int* )malloc(N*sizeof(int)); printf("Please input the array:"); //输入的时候注意要输入两个递增的子数列! for(i=0; i<N; i++) scanf("%d",&a[i]); printf("Please input the first begin number:"); scanf("%d", &p); printf("Please input the first end number:"); scanf("%d", &q); printf("Please input the second end number:"); scanf("%d", &r); merge(a,p,q,r); for (i = 0; i < N; i++) printf("%3d",a[i]); return0; }