逆序数就是左边序列比右边序列大的数对,现在要列出其中的逆序数对
public class Test01byReversePair {
A []a=new A[10];
int count=0;
public static void main(String[] args) {
Test01byReversePair t=new Test01byReversePair();
int []arr={1,6,3,4,5};
t.mergeSort(arr,0,arr.length-1);
for(int i=0;i<t.a.length;i++){
if(t.a[i]==null){
break;
}
System.out.println(t.a[i].left+"--"+t.a[i].right);
}
}
public void mergeSort(int []arr,int l,int r){
if(arr==null || arr.length<2){
return;
}
if(l==r){
return;
}
int mid=l+((r-l)>>1);
mergeSort(arr,l,mid);
mergeSort(arr,mid+1,r);
merge(arr,l,r);
}
private void merge(int[] arr, int l, int r) {
int i=l;
int mid=i+((r-l)>>1);
int j=mid+1;
int [] help=new int[r-l+1];
int index=0;
while (i<=mid&&j<=r){
for(int temp=i;arr[temp]>arr[j]&&temp<=mid;temp++){
a[count++]=new A(arr[temp],arr[j]);
}
/*if(arr[i]>arr[j]){
a[count++]=new A(arr[i],arr[j]);
}*/
help[index++]=arr[i]<arr[j]?arr[i++]:arr[j++];
}
while (i<=mid){
help[index++]=arr[i++];
}
while (j<=r){
help[index++]=arr[j++];
}
for(int p=0;p<help.length;p++){
arr[p+l]=help[p];
}
}
}
class A{
int left;
int right;
public A(int left,int right){
this.left=left;
this.right=right;
}
}
运行结果: