繁体   English   中英

计算按升序排列然后降序排列的数组中的反转次数

[英]Count the number of inversions in an array that is sorted in increasing order then decreasing order

给定一个按递增顺序然后递减顺序排序的数组,例如:{1, 3, 5, 4, 2},我想找到在 O(n) 中对这个数组进行排序所需的反转次数。 这是我的代码,它在 O(n) 中对这样的 arrays 进行排序:

void sort(long* a, long* result, long n)
 {
      long* start = &a[0];
      long* end = &a[n - 1];
      long count = 0;
      while (start <= end) {
        if (*start < *end) {
            result[count] = *start;
            start += 1;
        }
        else {
           result[count] = *end;
           end -= 1;
       }
      }
  }

在我的代码中,我从开始和结束使用了 2 个指针,并将排序后的数组存储到结果数组中。 如何使用类似算法计算反转次数?

您可以使用“https://www.geeksforgeeks.org/counting-inversions/”中的算法:
算法:

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

    您还可以在他们的网站上找到代码示例。

此外,对于您的 function ,您似乎只需要一个新变量来存储您执行的反转次数。

希望它有所帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM