利用归并排序,合并时从后向前合并,可以避免元素的移动。
class Solution {
public:
void merge(int A[], int m, int B[], int n) {
int i = m -1, j = n - 1, end = m + n - 1;
while(end >= 0) {
// 当A数组已经合并完,或者B的最后一个元素大于A的最后一个元素时,就应该合并B的元素了
if(i < 0 || (j >=0 && A[i] < B[j]))
A[end--] = B[j--];
else
A[end--] = A[i--];
}
}
};
京公网安备 11010502036488号