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

1.冒泡排序和归并排序

package co;
import java.io.BufferedReader;  
import java.io.BufferedWriter;  
import java.io.File;  
import java.io.FileInputStream;  
import java.io.FileOutputStream;  
import java.io.IOException;  
import java.io.InputStreamReader;  
import java.io.OutputStreamWriter;  
import java.util.ArrayList;  
import java.util.Date;  
import java.util.List;  
  
public class ArangeMent{  
    /** 
     *  冒泡排序和归并排序 
    */  
    static String Path="e:/123.txt";  
    static String bubbleSortDesPath="e:/largeW_bubble.txt";    //冒泡排序后结果的存放位置  
    static String mergeSortDesPath="e:/largeW_merge.txt";      //归并排序后结果的存放位置  
    public static void main(String[] args) {  
        try {  
            File file=new File(Path);  
            FileInputStream fis=new FileInputStream(file);  
            InputStreamReader reader=new InputStreamReader(fis, "utf-8");  
            BufferedReader bufferedreader=new BufferedReader(reader);   
            String nums="";  
            int num=0;  
            List<Integer> list=new ArrayList<Integer>();  
            while((nums=bufferedreader.readLine())!=null){  
                num=num+1;  
                list.add(Integer.parseInt(nums.trim()));  
            }  
            Integer[] NumsArray=(Integer[])list.toArray(new Integer[num]);  
            //开始冒泡排序  
            long timeStart=System.currentTimeMillis();  //开始冒泡排序计时  
            bubbleSort(NumsArray);  
            long timeEnd=System.currentTimeMillis();    //冒泡排序计时结束   
            System.out.println("冒泡排序所花费的时间是:"+(timeEnd-timeStart)+"毫秒");  
            //把冒泡排序的结果写到文本文件  
            ResultSortWriteTxt(NumsArray,0);  
            //开始归并排序  
            NumsArray=(Integer[])list.toArray(new Integer[num]);//为了防止冒泡排序之后的数组对归并排序产生影响,所以重新赋值  
            Integer[] num1=new Integer[NumsArray.length];  
            timeStart=System.currentTimeMillis();       //开始归并排序计时  
            Integer[] result  = mergeSort(NumsArray,0, NumsArray.length - 1,num1);   
            timeEnd=System.currentTimeMillis();     //归并排序计时结束  
            System.out.println("归并排序所花费的时间是:"+(timeEnd-timeStart)+"毫秒");  
            //把归并排序的结果写到文本文件  
            ResultSortWriteTxt(result,1);  
            System.out.println("文本中总共有:"+num+"条数据!");  
        } catch (Exception e) {  
            e.printStackTrace();  
        }  
    }  
    /** 
     * 冒泡排序 
     * @param NumsArray 
     * @throws IOException  
    */  
    public static void bubbleSort(Integer[] Array)throws IOException{  
        Integer[] NumsArray=(Integer[]) Array;  
        int temp=0;  
         for(int i=0;i<NumsArray.length;i++){  
             for(int j=i+1;j<NumsArray.length;j++){  
                 if(NumsArray[i]>NumsArray[j]){  
                    temp=NumsArray[i];  
                    NumsArray[i]=NumsArray[j];  
                    NumsArray[j]=temp;  
                 }  
             }  
            // System.out.println(NumsArray[i]);//输出每次用冒泡排序后的结果  
         }  
    }  
    /** 
     * 把排序的结果写到文本文件 
     * @param NumsArray 
     * @throws IOException 
    */  
    public static void  ResultSortWriteTxt(Integer[] NumsArray,int whichSort) throws IOException{  
         //循环输出冒泡排序后的数据到文本文件  
         File file=null;  
         if(whichSort==0){              //冒泡排序是表示0  
             file =new File(bubbleSortDesPath);  
         }else if(whichSort==1){        //归并排序是表示1  
             file =new File(mergeSortDesPath);  
         }  
         if(!file.exists()){  
             file.createNewFile();  
         }  
         FileOutputStream fos=new FileOutputStream(file);  
         BufferedWriter bw=new BufferedWriter(new OutputStreamWriter(fos,"utf-8"));  
         for(int i=0;i<NumsArray.length;i++){  
             //System.out.println(NumsArray[i]);  
             bw.write(NumsArray[i].toString()+"\r\n");  
             bw.flush();                    //每写入一次字节流数据刷新一次  
         }  
         fos.close();  
         bw.close();  
    }  
    /** 
     * 归并排序 
     * @param Array 
     */  
     private 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);     //右半部分递归调用  
             merg(num2, s, temp, t, num1);          //由num2去归并,返回的值放到num1中,num1赋新值,其实就是更新num2,然后让num2再去归并,返回新的num1  
            }  
            return num1;  
     }  
     //有序表的合并  
     private static void merg(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++];  
         }  
    }   
}







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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值