我正在尝试实现一个合并排序函数,我得到一个编译器错误,上面写着“不匹配'运算符='”它出现在我的递归赋值left_list = mergesort(left_list)和同样的错误中以下行使用right_list。
如果我取出赋值并且只有mergesort(left_list)但它没有正确排序,它会正确编译。我认为我现在拥有它的方式应该正确合并排序,但鉴于它没有,或者错误与这些行有关,或者它在mergesort()或merge()函数的其他地方。
任何帮助都将不胜感激。
void mergesort(vector<int> &data) {
vector<int> left_list;
vector<int> right_list;
if ( data.size() <= 1 ) {
return;
}
// creates a middle point to separate into 2 sub lists
int middle = ( data.size() / 2 );
// create a list of elements to the left of middle
for ( int i = 0; i < middle; i++ ) {
left_list.push_back(data[i]);
}
// create a list of elements to the right of middle
for ( unsigned int i = middle; i < data.size(); i++ ) {
right_list.push_back(data[i]);
}
// break down the sub lists until they are of size 1
left_list = mergesort(left_list);
right_list = mergesort(right_list);
// merge the sublists in the correct order
merge(left_list, right_list);
}
vector<int> merge(vector<int> &left, vector<int> &right) {
vector<int> result;
unsigned left_it = 0;
unsigned right_it = 0;
while( left_it < left.size() && right_it < right.size() ) {
// the smaller value is put into the result vector
if( left[left_it] < right[right_it] ) {
result.push_back(left[left_it]);
left_it++;
}
else
{
result.push_back( right[right_it] );
right_it++;
}
}
// Put the rest of the data from both vectors onto result
while( left_it < left.size() ) {
result.push_back( left[left_it] );
left_it++;
}
while( right_it < right.size() ) {
result.push_back( right[right_it] );
right_it++;
}
return result;
}
答案 0 :(得分:1)
您的代码尝试接受mergesort
函数的返回值。如果这就是你想要的,我原来的答案就是这样的。但是,如果mergesort
应该使用排序结果更新输入参数,那么它不需要返回任何值,void
就可以了。然后,获取其返回结果的赋值语句出错,应该更改。
mergesort(left_list);
mergesort(right_list);
但是,对merge
的调用需要将结果分配给输入参数。
data = merge(left_list, right_list);
我的原始答案如下:
您应该更改mergesort
函数以返回merge
返回的相同类型。
vector<int> mergesort(vector<int> &data) {
然后,您需要更新mergesort
实现,以便第一个return
语句返回输入参数:
return data;
应该更改最后一个语句以返回结果:
return merge(left_list, right_list);
我还没有看过算法本身的实现。