第三周作业

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;


public class sort {
public static ArrayList<Integer> allnumber = new ArrayList<Integer>();
public static void main(String[] args) {
readTxtFile("largeW.txt");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.out.println("归并排序开始时间:"+df.format(new Date()));
/*
bubbleSort(allnumber);
System.out.println("排序结束时间:"+df.format(new Date()));
writetofile("largeW_bubble.txt",allnumber);
System.out.println("写入成功!");
*/
mergeSort(allnumber);
System.out.println("归并排序结束时间:"+df.format(new Date()));
writetofile("largeW_merge.txt",allnumber);
System.out.println("写入成功!");
}
public static void readTxtFile(String filePath){
        try {
                File file=new File(filePath);
                if(file.isFile() && file.exists()){ //判断文件是否存在
                    InputStreamReader read = new InputStreamReader(new FileInputStream(file));
                    BufferedReader bufferedReader = new BufferedReader(read);
                    String lineTxt = null;
                    while((lineTxt = bufferedReader.readLine()) != null){
                     lineTxt = lineTxt.trim();   //去除空格
                     allnumber.add(Integer.parseInt(lineTxt));
                    
                    }
                    read.close();
        }else{
            System.out.println("找不到指定的文件");
        }
        } catch (Exception e) {
            System.out.println("读取文件内容出错");
            e.printStackTrace();
        }
     
    }
//冒泡排序
public static void bubbleSort(ArrayList<Integer> num){
for(int index=0;index<num.size()-1;index++){
for(int start = 0;start<num.size()-index-1;start++){
if(num.get(start)>num.get(start+1)){
int temp = num.get(start);
num.set(start, num.get(start+1));
num.set(start+1, temp);
}
}
}
}
//归并排序
public static void mergeSort(ArrayList<Integer> data) {  
        sort(data, 0, data.size() - 1);  
    }  
  
    public static void sort(ArrayList<Integer> data, int left, int right) {  
        if (left >= right)  
            return;  
        // 找出中间索引  
        int center = (left + right) / 2;  
        // 对左边数组进行递归  
        sort(data, left, center);  
        // 对右边数组进行递归  
        sort(data, center + 1, right);  
        // 合并  
        merge(data, left, center, right);  
      
    }  
  
  
    public static void merge(ArrayList<Integer> data, int left, int center, int right) {  
        // 临时数组  
        int[] tmpArr = new int[data.size()];  
        // 右数组第一个元素索引  
        int mid = center + 1;  
        // third 记录临时数组的索引  
        int third = left;  
        // 缓存左数组第一个元素的索引  
        int tmp = left;  
        while (left <= center && mid <= right) {  
            // 从两个数组中取出最小的放入临时数组  
            if (data.get(left) <= data.get(mid)) {  
                tmpArr[third++] = data.get(left++);  
            } else {  
                tmpArr[third++] = data.get(mid++);  
            }  
        }  
        // 剩余部分依次放入临时数组(实际上两个while只会执行其中一个)  
        while (mid <= right) {  
            tmpArr[third++] = data.get(mid++);  
        }  
        while (left <= center) {  
            tmpArr[third++] = data.get(left++);  
        }  
        // 将临时数组中的内容拷贝回原数组中  
        // (原left-right范围的内容被复制回原数组)  
        while (tmp <= right) {
         data.set(tmp, tmpArr[tmp++]);
        }  
    }  
  
   

public static void writetofile(String path,ArrayList<Integer> num){
try {
            File file=new File(path);
            if(file.isFile() && file.exists()){ //判断文件是否存在
             FileWriter fileWriter=new FileWriter(path, true); 
             BufferedWriter writer = new BufferedWriter(fileWriter);
             for(int index=0;index<num.size();index++){
             writer.write(num.get(index).toString()+"\n");
             }
             writer.close();
   }else{
       file.mkdir();
   }
            
   } catch (Exception e) {
       System.out.println("读取文件内容出错");
       e.printStackTrace();
   }
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值