void merge()

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++;
    }
}