package program;
import java.io.*;
public class Sorting {
public static void main(String[] args) {
// TODO 自动生成的方法存根
File file1 = new File("largeW.txt");
File file2 = new File("largeW_bubble.txt");
File file3 = new File("largeW_merge.txt");
int number1[] = new int[1000000];
int number2[] = new int[1000000];
int number3[] = new int[1000000];
//读取数据
try {
FileReader in = new FileReader(file1);
BufferedReader bufr = new BufferedReader(in);
String s = null;
int i = 0;
while((s = bufr.readLine()) != null) {
number1[i] = Integer.valueOf(s).intValue();
number2[i] = Integer.valueOf(s).intValue();
//System.out.println("第"+i+"行:"+number1[i]);
//System.out.println("第"+i+"行:"+number2[i]);
i++;
}
bufr.close();
in.close();
}
catch(Exception e) {
e.printStackTrace();
}
//冒泡排序
long starTime = System.currentTimeMillis();
for(int m = 0; m < number1.length-1; m++) {
for(int n = 0; n < number1.length-m-1; n++) {
if(number1[n] > number1[n+1]) {
int temp = number1[n+1];
number1[n+1] = number1[n];
number1[n] = temp;
}
}
}
long endTime = System.currentTimeMillis();
long time = endTime - starTime;
System.out.println("冒泡排序时间为:");
System.out.println(time);
/*
System.out.println("冒泡排序的结果为:");
for (int l = 0; l < number.length; l++){
System.out.print(number1[l]+", ");
}
*/
//写入冒泡排序数据
try {
FileWriter fw = new FileWriter(file2);
BufferedWriter bufw = new BufferedWriter(fw);
String S[]=new String[1000000];
for(int a = 0; a < S.length; a++) {
S[a] = Integer.toString(number1[a]);
}
for (int b = 0; b < S.length; b++) {
bufw.write(S[b]);
bufw.newLine();
}
bufw.close();
fw.close();
}
catch(Exception e) {
e.printStackTrace();
}
//归并排序
starTime = System.currentTimeMillis();
number2 = mergesort(number2, 0, number2.length - 1, number3);
endTime = System.currentTimeMillis();
time = endTime - starTime;
System.out.println("归并排序时间为:");
System.out.println(time);
//System.out.println("归并排序的结果为:");
//for (int f = 0; f < number2.length; f++){
// System.out.print(number2[f]+", ");
//}
//写入归并排序数据
try {
FileWriter fw = new FileWriter(file3);
BufferedWriter bufw = new BufferedWriter(fw);
String S[]=new String[1000000];
for(int j = 0; j < S.length; j++) {
S[j] = Integer.toString(number2[j]);
}
for (int k = 0; k < S.length; k++) {
bufw.write(S[k]);
bufw.newLine();
}
bufw.close();
fw.close();
}
catch(Exception e) {
e.printStackTrace();
}
}
private static int[] mergesort(int[] number2, int s, int t, int[] number3) {
int m;
int[] number4 = new int[t + 1];
if (s == t)
number3[s] = number2[s];
else {
m = (s + t) / 2;
mergesort(number2, s, m, number4);
mergesort(number2, m + 1, t, number4);
merg(number4, s, m, t, number3);
}
return number3;
}
private static void merg(int[] number4, int l, int m, int n, int[] number3) {
int i, j, k;
i = l;
j = m + 1;
k = l;
while (i <= m && j <= n) {
if (number4[i] < number4[j])
number3[k++] = number4[i++];
else {
number3[k++] = number4[j++];
}
}
while (i <= m) {
number3[k++] = number4[i++];
}
while (j <= n) {
number3[k++] = number4[j++];
}
}
}