编辑代码

#include <stdio.h>

void merge(int arr[], int arrStart, int mid, int arrEnd) {
    int i = arrStart;
    int j = mid;

    int arrLen = arrEnd - arrStart;

    if(arrLen < 2) {
        return 0;
    }

    int *temp = new int(arrEnd - arrStart);
    int tempIndex = 0;

    while(i < mid && j < arrEnd) {

        if(temp[i] > temp[j]) {
            temp[tempIndex] = arr[j];
            ++j;
        }else {
            temp[tempIndex] = arr[i];
            ++i;
        }

        ++tempIndex;

    }
    
    while(i < mid) {
        temp[tempIndex++] = arr[i++];
    }

    while(j < arrEnd) {
        temp[tempIndex++] = arr[j++];
    }

    for(int i = 0; i < arrEnd; i ++) {
        printf("%d ",temp[i]);
    }
}

int mergeSort(int arr[], int arrStart, int arrEnd) {
    int arrLen = arrEnd - arrStart;

    if (arrLen == 1) {
        return 1;
    }

    int mid = arrStart + arrLen/2;

    mergeSort(arr, arrStart, mid);
    mergeSort(arr, mid, arrEnd);

    return merge(arr, arrStart, mid, arrEnd);
}

int main () {
    int array[] = {11, 8, 3, 9, 7, 1, 2, 5};
    int arrStart = 0;
    int arrEnd = 9;
    mergeSort(array,arrStart,arrEnd);

    return 0;
}