public static int InversePair(int[] data,int start,int end,int[] temp) { int count=0; //累积逆序对的总数 if(start < end) { int mid = (end+start)/2; count += InversePair(data, start, mid ,temp); count += InversePair(data,mid+1,end,temp); count += getInversePair(data,start,mid,end,temp); } return count; } private static int getInversePair(int[] data, int start,int mid, int end,int[] temp) { int i=mid; //前半部分的末尾 int count=0; int j = end; //后半部分的末尾 int index=0; while(i >=start && j>mid) { if(data[i] > data[j]) { temp[index++] = data[i--]; count += j-mid; //j之前的所有元素都是逆序对数 } else { temp[index++] = data[j--]; } } while(i>=start) { temp[index++] = data[i--]; } while(j>mid) { temp[index++] = data[j--]; } //将其排好序的放入原数组 for(int k=0;k<index;k++) { data[end-k] = temp[k]; } return count; }
版权声明:本文为博主原创文章,转载请注明出处。
原文地址:http://blog.csdn.net/u014307117/article/details/47747277