Code:
void merge(vector<int> &array, int left, int middle, int right) { //zero based indexes
int n1 = middle - left;
int n2 = right - middle;
vector<int> left_array, right_array; //two arrays are necessary; both are array/2
vector<int>::iterator a_it = array.begin();
for(int i = 0; i != n1; ++i)
left_array.push_back(*(a_it + left + i));
left_array.push_back(1000000); //sentinel
for(int j = 0; j <= n2; ++j)
right_array.push_back(*(a_it + right + j));
right_array.push_back(1000000); //sentinel
array.clear(); //NOT SURE IF I SHOULD DO THIS! But seems necessary or I'll just make a huge vector in each call
vector<int>::iterator i = left_array.begin(), j = right_array.begin();
for(int k = 0; k <= r; ++k) {
if(*i <= *j) {
array.push_back(*i);
++i;
} else {
array.push_back(*j);
++j;
}
}
}
Code:
void mergesort(vector<int> &array, int left, int right) { //left and right and indexes
if(left < right) {
int middle = floor((left + right) / 2);
mergesort(array, left, middle);
mergesort(array, middle + 1, r);
merge(array, left, middle, right);
}
}
Hi there! I have updated the code Sorry for the less than descriptive arguments, it was only because it's like that in most text-books.
So, I asked this, but I think I mistyped.. Where should I use references? in merge()? OR in mergesort()? OR in both?
Anyway, The merge() seems to be working well, it's the recursive mergesort() that seems to mess up the left and right args passed.
Thanks again for the replies!