數列的逆序數對(難度係數 2顆星)

2021-12-29 19:56:59 字數 627 閱讀 3008

給定乙個數列,求數列的逆序數對總個數(逆序數對就是指數列中的兩個數,排在前面的數比排在後面的數大,這樣就構成了乙個逆序數對)。

例如: 4 2 1 3

這個數列的逆序數對有: (4, 2);(4, 1);(4, 3);(2, 1);總共有4個逆序數對。

ps:其實完全是使用了歸併排序的思想,只是在合併的時候多加了一句統計該範圍內的逆序數的個數,我們累加每乙個小區間的逆序數個數,自然就得到了整個數列的逆序數對總個數。

參考**:

#include

int arr = ;

int tmp[100];

int ninversecount = 0;//儲存逆序數對個數

void merge(int s, int m, int t)

}while (i <= m)

tmp[k++] = arr[i++];

while (j <= t)

tmp[k++] = arr[j++];

}void mergesoft(int s, int t)

}int main()

執行結果:

求數列的逆序數

在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序。乙個排列中逆序的總數就稱為這個排列的逆序數。123 4567 891011 1213 1415 1617 1819 2021 2223 2425 2627 28ll a 500005 tem 50000...

從歸併排序到數列的逆序數對

首先來看看原題 微軟2010年筆試題 在乙個排列中,如果一對數的前後位置與大小順序相反,即前面的數大於後面的數,那麼它們就稱為乙個逆序數對。乙個排列中逆序的總數就稱為這個排列的逆序數。如中,2和1,4和3,4和1,3和1是逆序數對,因此整個陣列的逆序數對個數為4,現在給定一陣列,要求統計出該陣列的逆...

輸出乙個數列的逆序數

1,這個問題演算法導論講歸併排序時,提到過。找到乙個實現 思路還是蠻清晰的。核心 對於兩個有序序列,找逆序對,遍歷一次即可。2,實現 include include using namespace std int inv int data,int n ret j tmp i j data i 不是逆...