### Trying to implement merge sort algorithm

I'm trying to implement a merge sort function and I'm getting a compiler error that says "no match for 'operator=' " It occurs on my recursive assignment of left_list = mergesort(left_list) and the same error in the following line using right_list.

It compiles correctly if I take out the assignment and just have mergesort(left_list) but then it doesn't sort correctly. I thought that the way I have it now should merge sort correctly, but given that it doesn't, either the error has something to do with those lines or it's elsewhere in the mergesort() or merge() function.

Any help would be appreciated.

Edit: I should add that this is a homework assignment and I was required to implement the code inside the function so the function "mergesort" is void even though I think it should return a vector, but my professor's online unit test grading system is counting on the fact that the function is "void"...
 ``123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172`` `````` void mergesort(vector &data) { vector left_list; vector 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 merge(vector &left, vector &right) { vector 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; }``````
Topic archived. No new replies allowed.