编辑代码

#include <stdio.h>


long long merge(int arr[], int temp[], int left, int mid, int right) {
    int i = left; 
    int j = mid + 1; 
    int k = left;
    long long inversionCount = 0;

    while (i <= mid && j <= right) {
        if (arr[i] <= arr[j]) {
            temp[k++] = arr[i++];
        } else {
            temp[k++] = arr[j++];
            inversionCount += mid - i + 1;
        }
    }

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

    while (j <= right) {
        temp[k++] = arr[j++];
    }

    for (i = left; i <= right; i++) {
        arr[i] = temp[i];
    }

    return inversionCount;
}


long long mergeSort(int arr[], int temp[], int left, int right) {
    long long inversionCount = 0;
    if (left < right) {
        int mid = left + (right - left) / 2;

    
        inversionCount += mergeSort(arr, temp, left, mid);
        inversionCount += mergeSort(arr, temp, mid + 1, right);

        
        inversionCount += merge(arr, temp, left, mid, right);
    }
    return inversionCount;
}

int main() {
    int arr[] = {2,4,3,1,5,6};
    int n = sizeof(arr) / sizeof(arr[0]);
    int temp[n]; 
    long long inversionCount = mergeSort(arr, temp, 0, n - 1);

    printf("逆序对的数量:%lld\n", inversionCount);

    return 0;
}