(转载请注明出处:http://blog.csdn.net/buptgshengod)
1.题目
这是一道检测inversion count的算法。它将检测输入序列中反序输入的个数,即检测其中有几对A[i] > A[j], i < j
比如输入4,3,2,1,输出应该为3+2+1=6.。 因为:
1. 4比3,2,1大,但4在输入序列中是第一位,比3,2,1的index都小
2. 3比2,1大
3. 2比1大
2.代码部分
/*
*
解:用冒泡法将序列从小到大排序,计算一共移动多少位,就有几个这样的序列对。时间复杂度:O(n²)
*/
public class Test {
public static void main(String[] args){
int i,j;
int t;
int number=0;
final int n=4;
int[] list = new int[n];
System.out.println("随机产生数列");
for(i=0;i<n;i++){
list[i]=(int)( Math.random()*100);
System.out.print(list[i]+",");
}
for(i=0;i<n-1;i++){
for(j=0;j<n-1;j++){
if(list[j+1]>=list[j]){
}
else{
t=list[j+1];
list[j+1]=list[j];
list[j]=t;
number++;
}
}
}
System.out.println();
System.out.println("有 "+number+" 对A[i] > A[j], i < j");
}
}