1.既然空间足够,那么直接从后往前比较,两个数组各出1个,较大的放到A[长度为m+n]的后面,直到某个数组比较完。
2.若A完而B有余,则将剩余B继续放到A空出的前面位置,正好。若B完而A有余,哈哈,不是刚好把空填满了嘛,收工。
void merge(int* A, int ALen, int m, int* B, int BLen, int n) { int i = m - 1, j = n - 1, k = m + n -1; //从后往前处理,A[i]和B[i]哪个大就放在A的后面 while(i >= 0 && j >= 0) { if(A[i] > B[j]) A[k--] = A[i--]; else A[k--] = B[j--]; } while(j >= 0) //若B有剩余的,从后往前依次放到A的前部分 A[k--] = B[j--]; }