开始我采用归并算法,发现结果并不完善,当A没有元素时结果不正确,归并的程序如下:
void merge(int* A, int ALen, int m, int* B, int BLen, int n) {
int tmp[m+n];
int index=0;
int i=0;
int j=0;
int k=0;
while(i<m && j<n){
if(A[i]<=B[j])
tmp[index++]=A[i++];
else
tmp[index++]=B[j++];
}

while(i<m){
    tmp[index++]=A[i++];
}
while(i<m){
    tmp[index++]=B[j++];
}

for (k = 0; k < m + n; k++) {
    A[k] = tmp[k];
}
printf("%d",A[k]);

}
以下不采用中间数组,A能够装下B,说明A的长度要大于B,从高往低逐个比较
void merge(int* A, int ALen, int m, int* B, int BLen, int n) {
// write code here
int i = m - 1;
int j = n - 1;
int end = m + n - 1;
while (j >= 0) {
A[end--] = (i >= 0 && A[i] > B[j]) ? A[i--] : B[j--];
}