C 計算逆序對

2021-06-26 12:37:18 字數 1044 閱讀 5153

網上有很多關於逆序對的計算方法及源**,我僅僅在這裡記錄下自己的理解

逆序對:設a[0...n]為包含n個不數的乙個序列,如果na[m],則稱(n,m)構成a中的乙個逆序對;

問題:給出乙個數字序列,找出其逆序對的個數;

解答:本文主要介紹採用歸併排序演算法計算逆序對;

主要思想為將陣列分成兩份,這樣所有的逆序對由三部分組成:1.前半部分的逆序對;2.後半部分的逆序對;3.前後兩部分之間的逆序對;

然後1,2中的逆序對可以分解為本問題的乙個子問題,適合採用遞迴求解;

源**如下:
#include #include using namespace std;

int countreversed(vector&a, int gegin,int end);

int merge(vector&a, int begin, int mid, int end);

int main()

cout << "result is : " << countreversed(arr, 0, arr.size() - 1) << endl;

getchar();

return 0;

}int countreversed(vector&a, int begin,int end)

else }

//計算前後之間逆序對的個數,因為這部分在計算完陣列前半部分逆序數和後

//半部分逆序數之後計算,所以在計算兩部分之間的逆序對的同時,對陣列進行

//歸併排序

int merge(vector&a, int begin, int mid, int end)

if (a.at(j) <= a.at(k))

else

}while (j <= mid)

while (k <= end)

for (i = 0; i < n; ++i)

return ncount;

}

C 計算逆序對

網上有很多關於逆序對的計算方法及源 我僅僅在這裡記錄下自己的理解 逆序對 設a 0 n 為包含n個不數的乙個序列,如果na m 則稱 n,m 構成a中的乙個逆序對 問題 給出乙個數字序列,找出其逆序對的個數 解答 本文主要介紹採用歸併排序演算法計算逆序對 主要思想為將陣列分成兩份,這樣所有的逆序對由...

陣列中的逆序對(c )

參考部落格 題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 輸入描述 題目保證輸入的陣列中沒有的相同的數字 資料範圍 對於 50的資料,...

788 逆序對的數量 C

給定乙個長度為n的整數數列,請你計算數列中的逆序對的數量。逆序對的定義如下 對於數列的第 i 個和第 j 個元素,如果滿足 i j 且 a i a j 則其為乙個逆序對 否則不是。輸入格式 第一行包含整數n,表示數列的長度。第二行包含 n 個整數,表示整個數列。輸出格式 輸出乙個整數,表示逆序對的個...