归并排序为了求序列的 逆序数
一个乱序序列的 逆序数 = 在只允许相邻两个元素交换的条件下,得到有序序列的交换次数
OJ题目:http://poj.org/problem?id=2299
一下是AC代码:
import java.util.Scanner;
public class Main{
static long num;
public static void main(String[] args){
Scanner scan = new Scanner(System.in);
int[] a;
while(scan.hasNext()){
int n = scan.nextInt();
if(n == 0)
break;
num = 0;
a = new int[n];
for(int i = 0; i < n; i++){
a[i] = scan.nextInt();
}
MergeSort(a, 0, n-1);
System.out.println(num);
}
}
public static void MergeSort(int array[], int first, int last){
int mid = 0;
if(first < last){
mid = (first + last) / 2;
MergeSort(array, first, mid);
MergeSort(array, mid+1, last);
Merge(array, first, mid, last);
}
}
public static void Merge(int array[], int left, int center, int right){
int[] temp = new int[right-left+1];
int i = left;
int j = center + 1;
int k = 0;
while(i <= center && j <= right){
if(array[i] > array[j]){
temp[k++] = array[j++];
num += center-i+1;
}else{
temp[k++] = array[i++];
}
}
while(i <= center)
temp[k++] = array[i++];
while(j <= right)
temp[k++] = array[j++];
for(i = left, k = 0; i <= right; i++, k++)
array[i] = temp[k];
}
}
3461

被折叠的 条评论
为什么被折叠?



