c ++ reverse order

c ++ seek to reverse

For example array (3,1,4,5,2) in reverse order to have a (3,1) (3,2) (4,2) (5,2) a total of four
in reverse order of the elements is larger than the right to the left , then the elements of the right and left elements can be generated in reverse order of
the code merge sort with almost

Code

#include <bits/stdc++.h>
using namespace std;
int a[100];
int r[100];
int ans = 0;
void sort(int s,int t)
{
    if (s == t)
        return ;
    else
    {
        int mid = (s + t) / 2;
        sort(s,mid);//排序mid前面部分
        sort(mid + 1,t);//排序好mid后面部分
        int i = s,j = mid + 1,k = s;
        while (i <= mid && j <= t)
        {
            if (a[i] <= a[j])
            {
                r[k] = a[i];
                k ++;
                i ++;
            }
            else
            {
                r[k] = a[j];
                k ++;
                j ++;
                //ans += mid - i + 1;
                ans = ans + mid - i + 1;//逆序对个数公式
            }
        }
        while (i <= mid)
        {
            r[k] = a[i];
            k ++;
            i ++;
        }
        while (j <= t)
        {
            r[k] = a[j];
            k ++;
            j ++;
        }
        for (int i = s;i <= t;i ++)
            a[i] = r[i];
    }
}
int main()
{
    int n;
    cin >> n;
    for (int i = 1;i <= n;i ++)//输入
    {
        cin >> a[i];
    }
    sort(1,n);
    cout << ans << endl;//ans就是逆序对的个数
    cout << endl;
    return 0;
}

understanding

For ans = ans + mid - i + 1 this formula, I understand the

Guess you like

Origin www.cnblogs.com/LJA001162/p/11099792.html