📌  相关文章
📜  用于计算数组中的倒数的 PHP 程序 - 集 1(使用合并排序)

📅  最后修改于: 2022-05-13 01:54:11.715000             🧑  作者: Mango

用于计算数组中的倒数的 PHP 程序 - 集 1(使用合并排序)

数组的反转计数表示 - 数组距离排序多远(或接近)。如果数组已经排序,则反转计数为 0,但如果数组以相反的顺序排序,则反转计数为最大值。
形式上来说,如果 a[i] > a[j] 并且 i < j 两个元素 a[i] 和 a[j] 形成一个反转
例子:

Input: arr[] = {8, 4, 2, 1}
Output: 6
Explanation: Given array has six inversions:
(8, 4), (4, 2), (8, 2), (8, 1), (4, 1), (2, 1).

Input: arr[] = {3, 1, 2}
Output: 2
Explanation: Given array has two inversions:
(3, 1), (3, 2) 

方法(简单):

方法:遍历数组,对于每个索引,找到数组右侧的较小元素的数量。这可以使用嵌套循环来完成。将数组中所有索引的计数相加并打印总和。

算法:

  1. 从头到尾遍历数组
  2. 对于每个元素,使用另一个循环找到小于当前数字的元素的计数,直到该索引。
  3. 总结每个索引的反转计数。
  4. 打印反转计数。

执行:

PHP
 $arr[$j])
                $inv_count++;
  
    return $inv_count;
}
  
// Driver Code
$arr = array(1, 20, 6, 4, 5 );
$n = sizeof($arr);
echo "Number of inversions are ", 
           getInvCount($arr, $n);
// This code is contributed by ita_c
?>


输出:

Number of inversions are 5

复杂性分析:

  • 时间复杂度: O(n^2),从头到尾遍历数组需要两个嵌套循环,所以时间复杂度是O(n^2)
  • 空间复杂度 O(1),不需要额外的空间。

请参阅有关数组中计数反转的完整文章 |设置 1(使用合并排序)了解更多详情!