在nlogn中计算反转

时间:2016-10-23 12:02:30

标签: c++ algorithm time-complexity

考虑一个数组'a'。如果[i]>,则[i]和[j]两个元素形成反转。 a [j]和i<学家

例如,给定

int a[5] = {2, 3, 8, 6, 1}

这有5个“反转”:

(8,6) (2,1) (3,1) (8,1) (6,1)

我的任务是编写一个C ++程序来计算数组中“反向”对的数量,运行时缩放为O( n log n

我的代码的运行时间为O( n ²):

int nghichdao(int a[], int n)
{
    int d = 0;
    for (int j = 1;j < n;j++)
        for (int i = 0;i < j;i++)
            if (a[i] > a[j]) {
                d++;
                cout << "(" << a[i] << "," << a[j] << ")" << endl;
            }
    return d;
}

如何将其改进为O( n log n )?

1 个答案:

答案 0 :(得分:0)

使用合并排序在N * logN中实现反转计数。请参阅此http://www.geeksforgeeks.org/counting-inversions/

相关问题