面試經典(9) 求陣列的逆序對

2021-06-21 13:30:28 字數 919 閱讀 9029

題目描述: 陣列中如果前面乙個數字大於後面的數字,則這倆個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數。面試直接讓寫歸併排序感覺有點傻,還是考察歸併排序遷移能力的題目比較好。

演算法分析:

下面來分析如何統計相鄰有序陣列的逆序對數目。用下標分別指向有序陣列的開端,設下標分別為i,j。

(d)規律:copy[i]<=copy[j],將i下標對應的資料放到臨時陣列,並將i++;否則將j下標對應的資料放到臨時陣列當中,j++,並且這個時候會產生mid-i+1個逆序對。

**如下:

long  int count=0;

int merge(int *data,int *copy,int beg,int mid,int end)

} while(i<=mid)

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

while(j<=end)

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

return inversion; }

int mergeinversion(int *data,int *copy,int beg,int end)

return inversion;

}

求陣列逆序對

在陣列中的兩個數字,如果前面乙個數字大於後面的數字,則這兩個數字組成乙個逆序對。輸入乙個陣列,求出這個陣列中的逆序對的總數p。並將p對1000000007取模的結果輸出。即輸出p 1000000007 題目保證輸入的陣列中沒有的相同的數字 資料範圍 對於 50的資料,size 10 4 對於 75的...

求陣列逆序對

思路 類似歸併排序演算法,在合併已經有序的相鄰子陣列的時候,計算前面陣列相對於後面陣列的逆序對數,整個遞迴過程可以算出所有逆序對 include void merge int a,int front,int middle,int end,int count else if j end while j...

演算法題 求陣列的逆序對

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