遞迴求逆序對個數

2021-10-07 19:17:17 字數 702 閱讀 3961

給定輸入n,之後輸入1到n的乙個排列,求排列中的逆序對的個數;

思路一:

思路二:

思路二**實現:

#include

#include

#include

using

namespace std;

//歸併,並計算出逆序數的個數

intmerge

(int a,

int s,

int mid,

int e,

int b)

else

}while

(i<=mid)

while

(j<=e)

for(

int i=s;i<=e;i++

) a[i]

= b[i]

;//歸併之後的有序序列存回a

return count;

}//求逆序數

intinversenumber

(int a,

int s,

int e,

int b)

intmain()

分治 求逆序對個數並列印逆序對

如果用最hick的方法去求那麼就是o n 2 的複雜度,如果想優化的話,用歸併排序的方法分治處理。主要思想 總逆序 左邊逆序 右邊逆序 左邊右邊分別排序後的逆序 include includeusing namespace std 用歸併排序的思想來求,歸併排序為o nlogn 的時間複雜度,比暴力...

求逆序對個數(分治)

求逆序對個數 在歸併排序 從大到小 的合併過程前,對兩個分支進行逆序對數的計算 該計算過程為o n include include include define n 100005 using namespace std int a n b n void merge int a,int s,int m...

樹狀陣列 求逆序對個數

樹狀陣列求逆序對其實挺簡單的 1.將要求的陣列離散化 離散化將每乙個數的值變為該數在陣列中的大小 inline bool cmp int x,int y for int i 1 i n i a i read p i i sort p 1,p n 1 cmp for int i 1 i n i a p...