Counting inversions in an array

前端 未结 30 1996
死守一世寂寞
死守一世寂寞 2020-11-22 04:14

I\'m designing an algorithm to do the following: Given array A[1... n], for every i < j, find all inversion pairs such that A[i] > A[j]

30条回答
  •  臣服心动
    2020-11-22 04:36

    Here is c++ solution

    /**
    *array sorting needed to verify if first arrays n'th element is greater than sencond arrays
    *some element then all elements following n will do the same
    */
    #include
    #include
    using namespace std;
    int countInversions(int array[],int size);
    int merge(int arr1[],int size1,int arr2[],int size2,int[]);
    int main()
    {
        int array[] = {2, 4, 1, 3, 5};
        int size = sizeof(array) / sizeof(array[0]);
        int x = countInversions(array,size);
        printf("number of inversions = %d",x);
    }
    
    int countInversions(int array[],int size)
    {
        if(size > 1 )
        {
        int mid = size / 2;
        int count1 = countInversions(array,mid);
        int count2 = countInversions(array+mid,size-mid);
        int temp[size];
        int count3 = merge(array,mid,array+mid,size-mid,temp);
        for(int x =0;x

提交回复
热议问题