第三周作业——冒泡排序和归并排序

来源:互联网 发布:大襟绸缎面花棉袄淘宝 编辑:程序博客网 时间:2024/05/01 17:09
对文件 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 blocke.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();      }  }



0 0
原创粉丝点击