【发布时间】:2018-10-27 02:18:41
【问题描述】:
我在合并排序的合并部分遇到了困难。每次我合并向量的两半时,它最终都会丢失向量中的至少一个值。
void merge(vector <double> &v, vector <double> &temp, int start, int size) {
int i, j, k;
i = start;
j = start + size - size/2;
k = start;
temp.resize(v.size());
while(i < start+size/2 && j < start+size) {
if(v[i] <= v[j]) {
temp[k] = v[i];
i++;
k++;
// cout << "i <= j " << temp[k] << endl;
} else {
temp[k] = v[j];
j++;
k++;
// cout << "i > j "<< temp[k] << endl;
}
}
for(i = start; i < start+size; i++) {
v[i] = temp[i];
}
}
【问题讨论】:
-
您的循环可以通过两个条件中的任何一个来完成。如果有的话,您必须从其中一个数组中复制左元素,直到第二个条件变为假。目前,如果一个部分由 21 个元素组成,另一个由 22 个元素组成,则仅合并 42 个元素。