如果一對元素(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 二,演算法分析 有兩種方法來求解逆序對 的數目。一種是,對陣列中的每個元素,都與它後面的元素進行比較,若後面的元素比它小,則找到乙個逆序對。這樣,第乙個元素...