Let S S0 S1 Sn 1 be a sequence of n distinct elements on

Let S = S[0], S[1), ..., S[n - 1] be a sequence of n distinct elements on which a total order relation is defined. We say that two elements S[i] and S[j] in S are a friendly pair if S[i]

Solution

//now in megersort strategy to find friendly pairs... you to need to change merge procedure..

//first globally declare a variable to count..the number of friendly pairs..

int count=0;//global variable which counts friendly pairs.

void merge(int arr[], int l, int m, int r)
{
    int i, j, k;
    int n1 = m - l + 1;
    int n2 = r - m;

    /* create temp arrays */
    int L[n1], R[n2];

    /* Copy data to temp arrays L[] and R[] */
    for (i = 0; i < n1; i++)
        L[i] = arr[l + i];
    for (j = 0; j < n2; j++)
        R[j] = arr[m + 1+ j];

    /* Merge the temp arrays back into arr[l..r]*/
    i = 0; // Initial index of first subarray
    j = 0; // Initial index of second subarray
    k = l; // Initial index of merged subarray
    while (i < n1 && j < n2)
    {
        if (L[i] <= R[j])
        {
            arr[k] = L[i];
            i++;

            //modified

           count=count+(n2-j);// counting the pairs....
        }
        else
        {
            arr[k] = R[j];
            j++;
        }
        k++;
    }

    /* Copy the remaining elements of L[], if there
       are any */
    while (i < n1)
    {
        arr[k] = L[i];
        i++;
        k++;
    }

    /* Copy the remaining elements of R[], if there
       are any */
    while (j < n2)
    {
        arr[k] = R[j];
        j++;
        k++;
    }
}

/* l is for left index and r is right index of the
   sub-array of arr to be sorted */
void mergeSort(int arr[], int l, int r)
{
    if (l < r)
    {
        // Same as (l+r)/2, but avoids overflow for
        // large l and h
        int m = l+(r-l)/2;

        // Sort first and second halves
        mergeSort(arr, l, m);
        mergeSort(arr, m+1, r);

        merge(arr, l, m, r);
    }
}

//after executing this program/algorithm.... the count variable contains the count of freindly pairs..

//and its complexity is O(n logn)

 Let S = S[0], S[1), ..., S[n - 1] be a sequence of n distinct elements on which a total order relation is defined. We say that two elements S[i] and S[j] in S
 Let S = S[0], S[1), ..., S[n - 1] be a sequence of n distinct elements on which a total order relation is defined. We say that two elements S[i] and S[j] in S

Get Help Now

Submit a Take Down Notice

Tutor
Tutor: Dr Jack
Most rated tutor on our site