演算法題12 陣列中所有的逆序對

2021-07-10 11:58:46 字數 1136 閱讀 4050

題目

求乙個陣列中所有的逆序對數,如陣列arr=,逆序對有5,2; 5,4; 9,8; 9,6; 8,6; 逆序對數為5

分析

因為陣列不是排序的,所以要找乙個元素後面所有比它小的數,最直觀的想法是依次遍歷後續的元素。這樣做的時間複雜度為o(n).

除此之外,涉及兩個元素間相互比較的計算在陣列的排序演算法中最為常見了,歸併排序在合併的時候可以記錄下對比中的逆序對數:

**

1

int mergecore(int arr,int small,int mid,int big,int

tmp)

2else

1115}16

17while (i<=mid)

1821

while (j<=mid)

2225

26for (int n=0;n)

2730

31return

rever_num;32}

3334

void mergesort(int arr,int s,int e,int tmp,int&reverse_num)

3540

int mid=s+(e-s)/2;41

mergesort(arr,s,mid,tmp,reverse_num);

42 mergesort(arr,mid+1

,e,tmp,reverse_num);

43 reverse_num+=mergecore(arr,s,mid,e,tmp);

4445}46

47int reversepairnum(int arr,int

len)

4853

54int* tmp=new

int[len];

55int reverse_num=0

;56 mergesort(arr,0,len-1

,tmp,reverse_num);

5758

for (int i=0;i)

5962

63delete

tmp;

64return0;

65 }

演算法題 求陣列的逆序對

在陣列中的兩個數字如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。給你乙個陣列,求出這個陣列中逆序對的總數。概括 如果a i a j 且 i j,a i 和 a j 構成乙個逆序對。樣例 序列 2,4,1,3,5 中,有 3 個逆序對 2,1 4,1 4,3 則返回 3 思路 最簡單的想...

刷題 陣列中的逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007。用類似歸併排序的思路。coding utf 8 class solution definverse...

51題陣列中的逆序對

題目描述 在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 思路 使用了歸併排序的思想 class solution else if m start...