对文件
largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW_bubble.txt 和 largeW_merge.txt 中,把两种排序结果的运行时间输出到屏幕中
package 排序;
import java.io.*;
public class t02
{
public static void partition(String[] arr, int from, int end) {
if (from < end)
{
int mid = (from + end) / 2;
partition(arr, from, mid);
partition(arr, mid + 1, end);
merge(arr, from, end, mid);
// System.out.println(from+"a");
}
}
public static void merge(String[] arr, int from, int end, int mid) {
String[] tmpArr = new String[end];
int tmpArrIndex = 0;
int part1ArrIndex = from;
int part2ArrIndex = mid + 1;
int l;
while ((part1ArrIndex <= mid) && (part2ArrIndex <= end))
{
l=arr[part1ArrIndex].compareTo(arr[part2ArrIndex]);
if (l < 0)
{
tmpArr[tmpArrIndex++] = arr[part1ArrIndex++];
} else
{
tmpArr[tmpArrIndex++] = arr[part2ArrIndex++];
}
}
while (part1ArrIndex <mid)
{
tmpArr[tmpArrIndex++] = arr[part1ArrIndex++];
}
while (part2ArrIndex < end-1)
{
tmpArr[tmpArrIndex++] = arr[part2ArrIndex++];
}
// System.arraycopy(tmpArr, 0, arr, from, end - from + 1);
}
public static void main(String[] args)throws Exception
{
try
{
FileReader fr=new FileReader("F:\\largeW.txt");
BufferedReader br=new BufferedReader(fr);
int len=0;
while(br.readLine()!=null)
{
len++;
}
System.out.println(len);
String[] s=new String[len];
int t=0;
String rl="";
FileReader fr1=new FileReader("F:\\largeW.txt");
BufferedReader br1=new BufferedReader(fr1);
while((rl=br1.readLine())!=null)
{
s[t]=rl;
t++;
//System.out.println(p++);
}
System.out.println("文本数据量是: "+len);
System.out.println("选取排序的文本数量为:20000 ");
len=20000;
int res;
String a;
long startTime=System.currentTimeMillis(); //获取开始时间
//开始冒泡排序
for(int i=0;i<len-1;i++)
for(int j=i+1;j<len;j++)
{
res=s[i].compareTo(s[j]);
//System.out.println(p++);
if(res>0)
{
a=s[i];
s[i]=s[j];
s[j]=a;
}
}
long endTime=System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间: "+(endTime-startTime)+"ms");
FileWriter fw=new FileWriter("F:\\largeW_bubble.txt",true);
BufferedWriter writer = new BufferedWriter(fw);
for(int i=0;i<len;i++)
{
writer.write(s[i]+"\r\n");
//System.out.println(p++);
}
long startTime1=System.currentTimeMillis(); //获取开始时间
//开始归并排序
partition(s,0,len-1);
long endTime1=System.currentTimeMillis(); //获取结束时间
System.out.println("程序运行时间: "+(endTime1-startTime1)+"ms");
FileWriter fw1=new FileWriter("F:\\largeW_merge.txt",true);
BufferedWriter writer1 = new BufferedWriter(fw1);
for(int i=0;i<len;i++)
{
writer1.write(s[i]+"\r\n");
//System.out.println(p++);
}
}catch(IOException e)
{
System.out.println("ERROR");
}
}
}
因为文本数量过大,运行速度太慢,选取了20000个进行排序,结果如下: