18 #ifndef _INPLACE_MERGE_H 19 #define _INPLACE_MERGE_H 22 #if defined(DEBUG_INPLACE_MERGE) 41 template<
typename T>
void inplace_merge(
42 std::vector<int> &indeces,
43 std::vector<int> &counts,
46 std::vector<T> &values)
48 if (first == (last))
return;
49 if (first == (last-1))
return;
54 if (first != (last - 2))
56 int middle = (first + last) / 2;
57 inplace_merge(indeces, counts, middle, last, values);
58 #if defined(DEBUG_INPLACE_MERGE) 61 inplace_merge(indeces, counts, first, middle, values);
62 #if defined(DEBUG_INPLACE_MERGE) 72 typename std::vector<T>::iterator startIterator = values.begin()+indeces[first];
73 typename std::vector<T>::iterator middleIterator = values.begin() + indeces[last-1];
74 typename std::vector<T>::iterator endIterator = values.begin() + indeces[last-1] + counts[last - 1];
75 std::inplace_merge(startIterator, middleIterator, endIterator);
76 counts[first] += counts[last - 1];
77 #if defined(DEBUG_INPLACE_MERGE)