问题,
已知两个数组有序实现一个方法将他们合并任然有序void MergeSort( int *pMerge, int *p1, int p1len, int *p2, int p2len )
我的解法
#include <iostream>
#include <stdio.h>
using namespace std;
void Print(int len, int* pTarget) {
for (int i = 0; i < len; ++i) {
cout << pTarget[i] << ' ';
}
cout << endl;
delete[] pTarget;
}
int* MergeSort(int* p1, int p1len, int* p2, int p2len) {
if (p1 == nullptr) {
return p2;
}
if (p2 == nullptr) {
return p1;
}
int* pMerge = new int[p1len + p2len];
int idMerge = p2len + p1len - 1;
int ida = p1len - 1;
int idb = p2len - 1;
while (idMerge >= 0) {
if (idb < 0) {
pMerge[idMerge--] = p1[ida--];
} else if (ida < 0 || p1[ida] < p2[idb]) {
pMerge[idMerge--] = p2[idb--];
} else {
pMerge[idMerge--] = p1[ida--];
}
}
return pMerge;
}
int main() {
int n1, n2;
cin >> n1 >> n2;
int a[n1], b[n2];
for (int i = 0; i < n1; ++i) {
cin >> a[i];
}
for (int i = 0; i < n2; ++i) {
cin >> b[i];
}
cout << endl;
Print(n1 + n2, MergeSort(a, n1, b, n2));
return 0;
}
思路是对的,有些细节上的问题,我写注释了。