求陣列中逆序的個數

2021-09-08 19:07:33 字數 699 閱讀 4804

考慮一下,逆序是說a[i]>a[j],i乙個比較好的思路是利用分治的思想:先求前面一半陣列的逆序數,再求後面一半陣列的逆序數,然後求前面一半陣列比後面一半陣列中大的數的個數(也就是逆序數),這三個過程加起來就是整體的逆序數目了。看這個描述,是不是有點像歸併排序呢?利用歸併排序的過程中,在每一次歸併兩個陣列的時候,如果左陣列比右陣列大,那麼著就是乙個逆序。記錄所有左陣列比右陣列大的情況,就是全部的逆序數目。

public class mergesort  else 

} while (i <= m)

while (j <= n)

for (i = 0; i < k; i++)

a[first + i] = temp[i];

} static void mergesort(int a, int first, int last, int temp)

} static void mergesort(int a)

public static void main(string ss) ;

int data = ;

mergesort(data);

for (int i = 0; i < data.length; i++)

system.out.println();

system.out.println(count);

}}

求陣列中逆序的個數

考慮一下,逆序是說a i a j i乙個比較好的思路是利用分治的思想 先求前面一半陣列的逆序數,再求後面一半陣列的逆序數,然後求前面一半陣列比後面一半陣列中大的數的個數 也就是逆序數 這三個過程加起來就是整體的逆序數目了。看這個描述,是不是有點像歸併排序呢?利用歸併排序的過程中,在每一次歸併兩個陣列...

求陣列逆序對數

題目 對於乙個元素個數為n的陣列a,若 a i a j 且0 i j n,則a i 和a j 為乙個逆序對。現在要求給定陣列的逆序對數 解析 對於這乙個題目,最容易想到的方法即順序掃瞄整個陣列。沒掃瞄到乙個元素,則將該元素與其後面的所有元素進行比較,若後面的元素比該元素大,則找到乙個逆序數。這一過程...

求陣列逆序對

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