求逆序对 C语言

void merge(int *a, int p, int q, int r, int *num){
    int i=p, j=q+1, k=0;
    int temp[r-p+1];
    while(i<=q && j<=r){
        if(a[i] <= a[j])
            temp[k++] = a[i++];
        else{
            num = q-i+1;
            temp[k++] = a[j++];
        }
    }
    while(i<=q)
        temp[k++] = a[i++];
    while(j<=r)
        temp[k++] = a[j++];
    for(i=0; i<r-p+1; i++)
        a[p+i] = temp[i];
}

void mergeSort(int *a, int p, int r, int *num){
    if(p>=r) return;
    int q = (p+r)/2;
    mergeSort(a, p , q, num);
    mergeSort(a, q+1, r, num);
    merge(a, p, q, r, num);
}

你可能感兴趣的:(求逆序对 C语言)