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

对文件   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();  
	    }  
}



  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值