剛寫好的代碼,VC下編譯通過。合並排序法的關鍵步驟實現。
#include?<stdio.h>
#include?<stdlib.h>
void?merge(int?A[],?int?B[],?int?C[],?int?n1,?int?n2){
int?i?=?0; int?j?=?0; int?k?=?0; int?pA?=?0,?pB?=?0; for(k=0;?k<n1+n2;?k++){ if(pA==1?&&?pB==0){C[k]?=?B[j];
j++;
} else?if(pA==0?&&?pB==1){C[k]?=?A[i];
i++;
} else?if(pA==0?&&?pB==0){if(A[i]<B[j]){
C[k]?=?A[i];
i++;
if(i>=n1)
pA?=?1;}
else{
C[k]?=?B[j];
j++;
if(j>=n2)
pB?=?1;}
} }}
void?main(){
int?n1,?n2; int?*A,?*B,?*C; int?i; printf("輸入n1:?"); scanf("%d",?&n1); A?=?(int*)malloc(sizeof(int)*n1); printf("從小到大輸入%d個整數:?\n",?n1); for(i=0;?i<n1;?i++){ printf("A[%d]?=?",?i); scanf("%d",?&A[i]); } printf("輸入n2:?"); scanf("%d",?&n2); B?=?(int*)malloc(sizeof(int)*n2); printf("從小到大輸入%d個整數:?\n",?n2); for(i=0;?i<n2;?i++){ printf("B[%d]?=?",?i); scanf("%d",?&B[i]); } C?=?(int*)malloc(sizeof(int)*(n1+n2)); printf("A:?"); for(i=0;?i<n1;?i++) printf("%d?",?A[i]); printf("\n"); printf("B:?"); for(i=0;?i<n2;?i++) printf("%d?",?B[i]); printf("\n"); merge(A,?B,?C,?n1,?n2); printf("調用merge()函數對A和B進行合並,結果保存在C...\n"); printf("合並後的C:?"); for(i=0;?i<n1+n2;?i++) printf("%d?",?C[i]); printf("\n"); free(A); free(B); free(C);}