in Profiler/merge_sort.cpp [11:45]
void merge(int left, int mid, int right, vector<int> &array) {
vector<int> leftArray(mid - left + 1);
vector<int> rightArray(right - mid);
for (int i = 0; i < leftArray.size(); i++)
leftArray[i] = array[left + i];
for (int j = 0; j < rightArray.size(); j++)
rightArray[j] = array[j + mid + 1];
int leftArrayIndex = 0, rightArrayIndex = 0;
int mergedArrayIndex = left;
while (leftArrayIndex < leftArray.size() && rightArrayIndex < rightArray.size()) {
if (leftArray[leftArrayIndex] <= rightArray[rightArrayIndex]) {
array[mergedArrayIndex] = leftArray[leftArrayIndex];
leftArrayIndex++;
} else {
array[mergedArrayIndex] = rightArray[rightArrayIndex];
rightArrayIndex++;
}
mergedArrayIndex++;
}
while (leftArrayIndex < leftArray.size()) {
array[mergedArrayIndex] = leftArray[leftArrayIndex];
leftArrayIndex++;
mergedArrayIndex++;
}
while (rightArrayIndex < rightArray.size()) {
array[mergedArrayIndex] = rightArray[rightArrayIndex];
rightArrayIndex++;
mergedArrayIndex++;
}
}