首页 > 解决方案 > 使用归并排序计数倒置

问题描述

我在 C++ 中使用合并排序编写了计数反转的代码,但我得到了错误的答案

#include <bits/stdc++.h>

using namespace std;

long long merge(long long *arr,long long s, long long mid,long long e){
    long long count =0;
    long long temp[e-s+1];
    long long i = s;
    long long j = mid+1;
    long long k =0;
    while(i<=mid && j<=e){
        if(arr[i]<arr[j]){
            temp[k++] = arr[i++];
        }else{
            temp[k++] = arr[j++];

            count = count + (mid+1)-i;
        }
    }
    while(i<=mid){
        temp[k++] = arr[i++];
    }
    while(j<=e){
        temp[k++] = arr[j++];
    }
    k=0;
    for(i=s;i<=e;i++){
        arr[i] = temp[k++];
    }
    return count;
}

long long mergeSort(long long *arr,long long s,long long e){
    long long count =0;
    if(s<e){
        long long mid = (s+e)/2;
        count += mergeSort(arr,s,mid);
        count += mergeSort(arr,mid+1,e);
        count += merge(arr,s,mid,e);
    }
    return count;
}

int main(){
    long long x;
    cin >> x;
    long long arr[x];
    for(long long i=0;i<x;i++){
        cin >> arr[i];
    }
    long long N =x;
    cout << mergeSort(arr,0,N-1);
}

它失败了这个测试用例

Array size : 42
elements : 468 335 1 170 225 479 359 463 465 206 146 282 328 462 492 496 443 328 437 392 105 403 154 293 383 422 217 219 396 448 227 272 39 370 413 168 300 36 395 204 312 323

正确输出

494

我的代码的输出

495

标签: c++

解决方案


推荐阅读