在数组中查找具有更大索引但数组中值较小的元素[重复]

Posted

技术标签:

【中文标题】在数组中查找具有更大索引但数组中值较小的元素[重复]【英文标题】:finding elements in an array which have greater indicies but less value in an array [duplicate] 【发布时间】:2020-01-11 16:12:37 【问题描述】:

我想查找数组中满足以下两个条件的元素个数:

    1 a[i] > a[j]

我正在使用以下代码,但我需要更快的任何建议?

for(int i=0; i<n; i++)
    for (int j=i+1; j<n; ++j)
        if (a[j] < a[i])
            ans++;
    

【问题讨论】:

一条建议;无论您使用什么算法,都可以测试带有优化启用的代码构建(也称为发布构建)。不要测试默认的调试版本。编译器优化可以产生巨大的性能差异。 当您说“更快的一个”时,您是指对于大数组大小渐近更快还是我们在谈论什么数组大小? @walnut 是的,我的意思是对于大数组大小是渐近的 @JesperJuhl 我记住了,谢谢你的提示:) 这能回答你的问题吗? Find the number of unordered pair in an array 或 Counting inversions in an array 【参考方案1】:

您尝试执行的操作称为inversion count。渐近地说,你当前算法的复杂度是O(n^2)。您可以使用基于合并排序的分而治之方法在O(nlogn) 时间内完成。阅读更多关于它的信息here。

【讨论】:

以上是关于在数组中查找具有更大索引但数组中值较小的元素[重复]的主要内容,如果未能解决你的问题,请参考以下文章

在线性时间和恒定空间中查找数组中缺失和重复的元素

给定一个数组,找出每个元素的最后一个较小的元素

排序算法!

查找重复项并将其替换为具有相同索引位置的新数组

异序二分查找 二分查找方程根 二分查找重复元素最后一个

编写在数字数组中查找元素索引的函数[重复]