逆序数=两子序列的逆序数+本序列逆序数
我们知道在对序列进行二路归并排序的时候,要将序列拆分成若干子序列,先将子序列排序,再合并子序列构成最终排序后的序列。二路归并算法还有一个特点,在进行归并操作时候的两个子序列是有序序列,所以,我们可以利用这一点,在归并子序列的时候,其中的子序列内部的逆序数必然是0,这时候能产生逆序数的情况必然处于两个子序列之间。
例:有两个子序列 1467和2358
在利用归并算法进行排序时, i,j 分别首先指向两序列首部(i= 0,j=0),即1和2。1<2,所以关于1的逆序数为j=0。接下来i++, i=1 指向4,4>2,j向右移动,j最终指向5,j=2,所以关于5的逆序数为2(5前面的2,3均小于4)。 同理关于6,7的逆序数均为3。所以整个序列的逆序数=2+3+3+两子序列未有序前的逆序数。