歸併排序法求陣列中的倒置數量

2021-06-28 06:35:40 字數 664 閱讀 3134

如果一對元素(a[i], a[j])是倒序的,即i < j但是a[i] > a[j],則他們被稱為乙個倒置。設計o(nlogn)的演算法來計算陣列中的倒置數量。

利用歸併排序實現原始碼如下:

#include #include using namespace std;

void merge(int *left, int leftsize, int *right, int rightsize, int *result, int &reversenum)

else

*result++ = *left++;

} while(left < left_end)

*result++ = *left++;

while(right < right_end)

*result++ = *right++;

}void mergesort(int *arr, int len, int &reversenum)

int calreversepair(int *arr, int len)

int main()

; cout << calreversepair(a, sizeof(a) / sizeof(a[0])) << endl;

return 0;

}

執行結果為:28

歸併排序求陣列中的逆序對

描述 測試說明與提交 提交狀態 題目設定 給定一組數,其中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。首先輸入資料組數t 1 t 100 每組測試資料報括兩行 第一行包含乙個整數n,表示陣列中的元素個數。其中1 n 10 5。第...

利用歸併排序求陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數 如陣列,逆序對總共有5對,這道題可以採用歸併排序的思想來處理 先把陣列分成兩個子串行,統計左半部分逆序對的數目和右半部分逆序對的數目,然後將兩個子串行排序,避免重複 然後再統計...

歸併排序應用之求陣列中的逆序數

一,問題描述 給定乙個陣列,求解該陣列中有多少組逆序對。比如 7,5,6,4 一共有五對逆序對。分別是 7,6 7,5 7,4 6,4 5,4 二,演算法分析 有兩種方法來求解逆序對 的數目。一種是,對陣列中的每個元素,都與它後面的元素進行比較,若後面的元素比它小,則找到乙個逆序對。這樣,第乙個元素...