簡體   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