思路描述:
暴力求解
归并法:O(nlogn)
代码实现:
package JBArray;
import javax.xml.stream.events.StartDocument;
public class ReverseCount {
public static int reverseCount = 0;
public static void merge(int[] a,int left ,int mid, int right){
int[] tmpArray = new int[a.length];
int rightStart = mid+1;
int tmp = left;
int third = left;
while (left<=mid&&rightStart<=right) {
if (a[left]<=a[rightStart]) {
tmpArray[third++]=a[left++];
}else{
reverseCount += mid-left+1;
tmpArray[third++]=a[rightStart++];
}
}
//如果左边还有数据需要拷贝,把左边数组剩下的拷贝到新数组
while(left<=mid){
tmpArray[third++] = a[left++];
}
//如果右边还有数据......
while(rightStart<=right){
tmpArray[third++] = a[rightStart++];
}
while(tmp<=right){
a[tmp] = tmpArray[tmp++];
}
}
public static void sort(int[] a, int begin,int end){
if(begin<end){
int mid = (end+begin)/2;
sort(a, begin, mid);
sort(a, mid+1, end);
merge(a, begin, mid,end);
}
}
public static void main(String[] args) {
int array[]={1,5,3,2,6};
sort(array, 0, array.length-1);
System.out.print(reverseCount);
}
}