您的位置:首页 > 其它

求逆序数

2015-11-02 22:26 274 查看
package hello;
import java.io.BufferedReader;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import javax.imageio.plugins.bmp.BMPImageWriteParam;
import javax.xml.crypto.Data;

public class Hello {
static int[] a = new int[100000];
static int N = 100000;
static long count = 0;

public static void merge_Count(int a[], int m, int l, int r) {

int L[] = new int[l - m + 1];
int R[] = new int[r - l];
int p = 0;
int q = 0;
for (int i = m; i <= l; i++)
L[p++] = a[i];
for (int i = l + 1; i <= r; i++) {
R[q++] = a[i];
}
int i = 0, j = 0;
for (int k = m; k <= r; k++) {
if (i <= l - m & j <= r - l - 1) {
if (L[i] < R[j]) {
a[k] = L[i];
i++;
} else {
a[k] = R[j];
j++;
count = count + l - m -i+ 1;
}
} else if (i > l - m) {
a[k] = R[j++];
} else {
a[k] = L[i++];
}
}
}

public static void inversion_count(int a[], int l, int r) {

if (l < r) {
int m = (l + r) / 2;
inversion_count(a, l, m);
inversion_count(a, m + 1, r);
merge_Count(a, l, m, r);
} else {
return;
}
}

public static void main(String[] args) {

try {
FileReader fr = new FileReader("Q2.txt");
BufferedReader br = new BufferedReader(fr);

int i = 0;
String line;
while ((line = br.readLine()) != null) {
a[i++] = Integer.parseInt(line);
}
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
inversion_count(a, 0, N - 1);
System.out.println(count);
}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: