void MergeSort (const int V1[], int len1, const int V2[], int len2, int S[], int &lens) {
int i1=0, i2=0;
while (i1<len1 && i2<len2) {
if (V1[i1]<=V2[i2])
S[lens++]=V1[i1++];
else
S[lens++]=V2[i2++];
}
while (i1<len1) S[lens++]=V1[i1++];
while (i2<len2) S[lens++]=V2[i2++];
}
void MergeSort (const vector<int> &V1, const vector<int> &V2, vector<int> &S) {
int i1=0, i2=0;
S.clear();
while (i1<V1.size() && i2<V2.size()) {
if (V1[i1]<=V2[i2])
S.push_back(V1[i1++]);
else
S.push_back(V2[i2++]);
}
while (i1<len1) S.push_back(V1[i1++]);
while (i2<len2) S.push_back(V2[i2++]);
}
void MergeSort (queue<int> &V1, queue<int> &V2, queue<int> &S) {
while (!V1.empty() && !V2.empty()) {
if (V1.front()<=V2.front()) {
S.push(V1.front());
V1.pop();
} else {
S.push(V2.front());
V2.pop();
}
}
while (!V1.empty()) {
S.push(V1.front());
V1.pop();
}
while (!V2.empty()) {
S.push(V2.front());
V2.pop();
}
}
void MergeSort (const list<int> &V1, const list<int> &V2, list<int> &S) {
S.clear();
list<int>::const_iterator i = V1.begin();
list<int>::const_iterator j = V2.begin();
while ( i!=V1.end() && j!=V2.end() ) {
if (*i<=*j) {
S.push_back(*i);
++i;
} else {
S.push_back(*j);
++j;
}
}
while (i!=V1.end()) {
S.push_back(*i);
++i;
}
while (j!=V2.end()) {
S.push_back(*j);
++j;
}
}
void MergeSort (const list<int> &V1, const list<int> &V2, list<int> &S[]) {
S.clear();
list<int>::const_iterator i = V1.begin();
list<int>::const_iterator j = V2.begin();
while ( i!=V1.end() && j!=V2.end() ) {
if (*i<=*j) {
S.push_back(*(i++));
} else {
S.push_back(*(j++));
}
}
while (i!=V1.end()) {
S.push_back(*(i++));
}
while (j!=V2.end()) {
S.push_back(*(j++));
}
}
temmplate<typename sourceIT, typename destinationIT>
void MergeSort (sourceIT b1, sourceIT e1, sourceIT b2, sourceIT e2, destinationIT bd) {
sourceIT i1, i2;
destinationIT d;
while ( i1!=e1 && i2!=e2 ) {
if (*i1<=*i2) {
*d = *i1;
++i1
++d;
} else {
*d = *i2;
++i2
++d;
}
}
while (i1!=e1) {
*d = *i1;
++i1
++d;
}
while (i2!=e2) {
*d = *i2;
++i2
++d;
}
}