歸併排序應用 逆序對

2021-08-08 01:29:44 字數 557 閱讀 1032

題目:在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。 即輸出p%1000000007(**於劍指offer)

題目解析:正常做法逐個掃瞄時間複雜度o(n^2)肯定不行。就要找規律,這道題目是關於逆序對的,那麼排序好的就不需要統計,當所有的數都排序好後(增序)這道題目也就完成了。所以這是一道排序的題目。可以降低時間複雜度,並且相互之間有序的排序演算法就是歸併排序。

class solution 

void inversepaircore(vector

&data, vector

& copy, int &sum, int s, int e)

else

}while(i>=s)

copy[k--] = data[i--];

while(j>=mid+1)

copy[k--] = data[j--];

for(i=s; i<=e; i++) }}

};

逆序對 (歸併排序)

逆序對的nlogn方法,改進後的歸併排序 給定排列p,求排列的逆序對數量。p的長度 100000。要求o nlogn 定義歸併排序過程merge l,r merge l,r merge l,mid merge mid 1,r count l,mid,mid 1,r 只需要考慮左右兩段之間造成的逆序對...

歸併排序 逆序對

按照劉汝佳說的,歸併排序分三步 1.劃分問題,即把序列分成元素盡量相等的兩半 2.遞迴求解 3.合併子問題 其實就是把乙個序列不斷的二分,直到只有兩個元素的時候,然後排序,然後返回,再排序。先上 include using namespace std long long a 100005 t 100...

歸併排序(逆序對)

現在我們在競賽中最常用的排序是快速排序,c 只要乙個sort就搞定,但非常明顯,歸併排序的時間複雜度是最優的而且非常穩定,但是人們經常把它用在求逆序對個數上面。那麼下面我用乙個這樣的題來講一下歸併排序。點這裡看題目和樹狀陣列解法。歸併排序是將數列a l,h 分成兩半a l,mid 和a mid 1,...