编辑代码

#include <stdio.h>

int mergeSort(int arr[],int arrStrat,int arrEnd){
    int num = 0;
    int arrLen = arrEnd - arrStrat;
    if(arrLen == 1){
        return 0;
    }
    int mid = arrStrat + arrLen / 2;
    num += mergeSort(arr,arrStrat,mid);
    num += mergeSort(arr,mid,arrEnd);
    return num + merge(arr,arrStrat,mid,arrEnd);
}

int merge(int arr[],int arrStart,int mid,int arrEnd){
    int num  = 0;
    int arrLen = arrEnd - arrStart;
    if(arrLen < 2){
        return 0;
    }
    int i = arrStart;
    int j = mid;
    int tempIndex = 0;
    int temp[arrLen];

    while (i < mid && j < arrEnd) {
        if (arr[i] > arr[j]) {
            temp[tempIndex] = arr[j];
            ++j;
            num += (mid - i);
        }
        else {
            temp[tempIndex] = arr[i];
            ++i;
        }
        ++tempIndex;
    }
    while (i < mid) {
        temp[tempIndex++] = arr[i++];
    }

    while (j < arrEnd) {
        temp[tempIndex++] = arr[j++];
    }
    for (tempIndex = 0, i = arrStart;tempIndex < arrLen && i < arrEnd;tempIndex++, i++) {
        arr[i] = temp[tempIndex];
    }
    return num;
}

void printArray(int arr[], int arrLen) {
    for (int i = 0; i < arrLen; ++i) {
        printf("%d ",arr[i]);
    }
}

int main () {
    //int arr[] = {7,1,8,3,5,4,6,2};
    int arr[] = {3,1,2,4,5,6};
    int flag = mergeSort(arr,0,sizeof(arr)/sizeof(int));
    printf("%d\n",flag);
    printArray(arr,sizeof(arr)/sizeof(int));
    return 0;
}