/*
对文件
largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW_bubble.txt 和 largeW_merge.txt 中,把两种排序结果的运行时间输出到屏幕中(发博文时把运行时间的截图作为运行结果提交)。
*/
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
public class sort
{
public static void sort(String[] arr, int start, int end) {
if (start>= end)
return;
// 找出中间索引
int mid = (start + end) / 2;
// 对左边数组进行递归
sort(arr,start, mid);
// 对右边数组进行递归
sort(arr, mid + 1, end);
// 合并
mergeSort(arr, start, end, mid);
}
public static void mergeSort(String[] arr, int start, int end, int mid) {
String[] tmpArr = new String[end];
int tmpArrIndex = 0;
int part1ArrIndex = start;
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++];
}
}
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("文本数据量是: "+len);
System.out.println("选取排序的文本数量为 :10000");
len=10000;
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]);
if(res>0)
{
a=s[i];
s[i]=s[j];
s[j]=a;
}
}
/*for(i=0;i<array.length-1;i++){
for(j=0;j<array.length-i-1;j++){
if(array[j]>array[j+1]){
temp=array[j];
array[j]=array[j+1];
array[j+1]=temp;
}
}
}*/
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");
}
long startTime1=System.currentTimeMillis(); //获取开始时间
//开始归并排序
sort(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");
}
}
catch(IOException e)
{
System.out.println("ERROR");
}
}
}