您的位置:首页 > 其它

算法导论--逆序对

2017-10-01 22:56 344 查看


答:

a)、10个逆序对

b)、n(n−1)2

c)、代码:

public class InversionPro {
static int count = 0;
public static void main(String[] args) {
int[] arr = {10,9,8,7,6,5,4,3,2,1};
InversionProFun(arr,0,arr.length-1);
System.out.println("逆序对数目为:"+count);
}

public static void InversionProFun(int[] arr,int l,int r){
if(l<r){
int mid = (l+r)/2;//求中间值
InversionProFun (arr,l,mid);
InversionProFun(arr,mid+1,r);
Merge(arr,l,mid,r);
}
}

public static void Merge(int[] arr,int l,int mid,int r){
int n1 = mid - l +1;
int n2 = r - mid;
//分解成两个新数组,用来存放左边和右边的内容
int[] L = new int[n1];
int[] R = new int[n2];
for(int i=0;i<n1;i++){
L[i] = arr[l+i];
}
for(int i=0;i<n2;i++){
R[i] = arr[mid+1+i];
}
for(int i=0;i<L.length;i++){
for(int j=0;j<R.length;j++){
if(L[i]>R[j]){
count++;
}
}
}
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  算法导论