package suanfazuoye_3;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.util.Arrays;
public class mergeSort {
BufferedReader br = null;
BufferedWriter bw = null;
static String[] array = null;
public mergeSort() throws IOException{
br = new BufferedReader(new FileReader(new File("E:"+File.separator+"largeW.txt")));
bw = new BufferedWriter(new FileWriter(new File("f:"+File.separator+"largeW_merge.txt ")));
}
//归并排序
public String[] mergesort(String[] arrs){
if(arrs.length < 2){
return arrs;
}
int middle = arrs.length % 2 == 0 ? arrs.length / 2 :(arrs.length-1)/2;
String[] left = Arrays.copyOfRange(arrs, 0, middle);
String[] right = Arrays.copyOfRange(arrs, middle, arrs.length);
String[] lres = mergesort(left);
String[] rres = mergesort(right);
return merge(lres,rres);
}
private String[] merge(String[] lres,String[] rres){
String[] res = new String[lres.length + rres.length];
int l = 0;
int r = 0;
int c = 0;
while(l < lres.length && r < rres.length){
if (Double.parseDouble(lres[l]) < Double.parseDouble(rres[r])) {
res[c++] = lres[l++];
}else{
res[c++] = rres[r+1];
}
}
if(l == lres.length ){
while(r < rres.length){
res[c++] = rres[r++];
}
return res;
}
if(r == lres.length ){
while(l < lres.length){
res[c++] = lres[l++];
}
return res;
}
return res;
}
//输出已经排好序的数据的文件
public void setArray() throws IOException{
String tmp = "";
for(int r = 0;r < array.length;r++){
tmp = array[r] + ",";
bw.write(tmp);
tmp = "";
}
bw.close();
}
//获取文件中的数据
public String[] getArray() throws IOException{
String tmp[] = new String[1000000];
int num = 0;
while(br.read() != -1){
tmp[num] = br.readLine();
// System.out.println(tmp[num]);
num++;
}
tmp = Arrays.copyOf(tmp, num);
br.close();
return tmp;
}
public static void main(String[] args) throws IOException {
mergeSort test = new mergeSort();
array = test.getArray();
test.mergesort(array);
test.setArray();
}
}