源代码如下:
数据时间显示:归并排序时间比冒泡排序快将近三分之一的时间
在大数据排序时,优势更加明显
package 实验二;
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.ArrayList;
import java.util.Collections;
import java.util.List;
public class third {
public static void main(String[] args) {
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();
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);
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);
//写入归并排序数据
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++];
}
}
}
数据时间显示:归并排序时间比冒泡排序快将近三分之一的时间
在大数据排序时,优势更加明显