package java程序员面试笔试宝典;
import java.util.Arrays;
public class 题8_5_18求解数组中反序对个数 {
//归并排序算法没有明白,照着敲了一遍,但是结果也不对
static int count=0;
public static void main(String[] args) {
int[] a={10,1,5,3,2,6};
reverseCount(a);
System.out.println(Arrays.toString(a));
mergeSort(a, 0, a.length-1);
System.out.println();
System.out.println(Arrays.toString(a));
System.out.println();
System.out.println(count);
}
public static void merge(int[] a,int p,int r){
int q=(r+p)/2;
int n1=q-p+1;
int n2=r-q;
int[] L=new int[n1];
int[] R=new int[n2];
int i=0;
for (int k=p; i < L.length; i++) {
L[i]=a[k++];
}
for (int j = 0,k=q+1; j < R.length; j++) {
R[j]=a[k++];
}
int j,k;
for (i = 0,j=0,k=p; i <L.length&&j<R.length; k++) {
if(L[i]>R[j]){
a[k]=R[j++];
count+=q-i+1;
}else{
a[k]=L[i++];
}
}
if(i<L.length){
for ( j = i; j < L.length; j++) {
a[k++]=L[j];
}
}
if(j<R.length){
for (i = j; i < R.length; i++) {
a[k++]=R[i];
}
}
}
public static void mergeSort(int[] a, int p,int r){
if(p<r){
int q=(r+p)/2;
mergeSort(a, p, q);
mergeSort(a, q+1, r);
merge(a,p,r);
}
}
//蛮力法
public static int reverseCount(int[] a){
int count=0;
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j < a.length; j++) {
if(a[i]>a[j]){
count++;
}
}
}
System.out.println(count);
return count;
}
}
如何求解数组中反序对的个数
猜你喜欢
转载自blog.csdn.net/m0_38068868/article/details/81737846
今日推荐
周排行