对文件
largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW_bubble.txt 和 largeW_merge.txt 中,把两种排序结果的运行时间输出到屏幕中(发博文时把运行时间的截图作为运行结果提交)。
package homework;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.util.ArrayList;
import java.util.List;
public class Sort {
static String pathbubble="src/largeW_bubble.txt";
static String pathTinyw="src/largeW_merge.txt ";
static String pathlargew="src/largeW.txt";//largew.txt的文件路径
public static void main(String args[]){
try {
File largewfile=new File(pathlargew);
InputStreamReader reader=new InputStreamReader(new FileInputStream(largewfile));
BufferedReader bfr=new BufferedReader(reader);
List<Integer> list=new ArrayList<Integer>();
String line="";
int num=0;
while((line=bfr.readLine())!=null){
num=num+1;
list.add(Integer.parseInt(line.trim()));
}
Integer[] DataArray=(Integer[])list.toArray(new Integer[num]);//
//冒泡排序
long BubTimeStart=System.currentTimeMillis();//开始冒泡排序计时
BubbleSort(DataArray);
long BubTimeEnd=System.currentTimeMillis();//结束冒泡排序计时
System.out.print("冒泡排序花费"+((BubTimeEnd-BubTimeStart)/1000)+"秒");//计算冒泡排序所用时间
ResultWrite(DataArray,0);
//归并排序
DataArray=(Integer[])list.toArray(new Integer[num]);
Integer[] num1=new Integer[DataArray.length];
long MerTimeStart=System.currentTimeMillis();
Integer[] Mergeresult=MergeSort(DataArray,0,DataArray.length-1,num1);
long MerTimeEnd=System.currentTimeMillis();
System.out.print("归并排序花费"+((MerTimeEnd-MerTimeStart)/1000)+"秒");
ResultWrite(Mergeresult,1);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public static void BubbleSort(Integer[] Array) throws IOException{
Integer[] DataArray=(Integer[]) Array;
int temp=0;
for(int a=0;a<DataArray.length;a++){
for(int b=a+1;b<DataArray.length;b++){
if(DataArray[a]>DataArray[b]){
temp=DataArray[a];
DataArray[a]=DataArray[b];
DataArray[b]=temp;
}
}
}
}
public static Integer[] MergeSort(Integer[] num,int s,int t,Integer[] num1){
int temp;
Integer[] num2=new Integer[t+1];
if(s==t){
num1[s]=num[s];
}
else{
temp=(s+t)/2;
MergeSort(num,s,temp,num2);//左半部分的递归调用
MergeSort(num,temp+1,t,num2);//右半部分的递归调用
merge(num2,s,temp,t,num1);
}
return num1;
}
//合并有序表
private static void merge(Integer[] num2,int l,int m,int n,Integer[] num1){
int i,j,k;
i=l;
j=m+1;
k=l;
while(i<=m&&j<=n){
if(num2[i]<num2[j])
num1[k++]=num2[i++];
else{
num1[k++]=num2[j++];
}
}
while(i<=m){
num1[k++]=num2[i++];
}
while(j<=n){
num1[k++]=num2[j++];
}
}
public static void ResultWrite(Integer[] lineDataArray,int whichSort) throws IOException{
//循环输出冒泡排序后的数据到文本文件
System.out.println("创建");
File file=null;
if(whichSort==0){//冒泡排序是表示0
file =new File(pathbubble);
}else if(whichSort==1){//归并排序是表示1
file =new File(pathTinyw);
}
if(!file.exists()){
file.createNewFile();
}
FileOutputStream fos=new FileOutputStream(file);
BufferedWriter writer=new BufferedWriter(new OutputStreamWriter(fos,"gb2312"));
for(int i=0;i<lineDataArray.length;i++){
writer.write(lineDataArray[i].toString()+"\r\n");
writer.flush();
}
fos.close();
writer.close();
}
}