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

1. 排序。对文件 largeW.txt下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW_bubble.txt 和 largeW_merge.txt 中,把两种排序结果的运行时间输出到屏幕中


import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.FileReader;  
import java.io.IOException;  
import java.util.ArrayList;  
  
public class bubbleSort {  
  
    public static void main(String[] args) {  
        
        double start_all = System.currentTimeMillis();  
        String path = "src/largeW.txt";  
        ArrayList<Integer> list = read(path);  
        int temp;  
        double start = System.currentTimeMillis();  
        for (int i = 0; i < list.size(); i++) {  
            for (int j = i; j < list.size(); j++) {  
                if (list.get(i) > list.get(j)) {  
                    temp = list.get(i);  
                    list.set(i, list.get(j));  
                    list.set(j, temp);  
                }  
            }  
        }  
        double end = System.currentTimeMillis();  
        System.out.println("冒泡排序时间为: " + (end - start)+"毫秒");  
        // 写入txt文件  
        write(list);  
        System.out.println("成功写入");  
        double end_all = System.currentTimeMillis();  
        System.out.println("总运行时间为: " + (end_all - start_all)+"毫秒");  
    }  
    //创建并写入largeW_bubble.txt文件  
    public static void write(ArrayList list) {  
        File f = new File("src/largeW_bubble.txt");  
        FileOutputStream fou = null;  
        try {  
  
            fou = new FileOutputStream(f, true);
  
            for (int i = 0; i < list.size(); i++) {  
                String s = list.get(i).toString();  
                String a = "" + s + "\t\n";  
                // byte []bytes=new byte[1024];  
                // 如何把string转换byte数组  
                fou.write(a.getBytes());  
  
            }  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        } finally {  
            try {  
                fou.close();  
            } catch (Exception e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
    }  
    //读取文件到Arraylist 数组  
    public static ArrayList read(String path) {  
        ArrayList<Integer> list = new ArrayList<Integer>();  
        BufferedReader input = null;  
        try {  
            FileReader in = new FileReader(path);  
            input = new BufferedReader(in);  
            String ss;  
            try {  
                while ((ss = input.readLine()) != null) {  
                    String[] s = ss.split("\r\n");  
                    for (int i = 0; i < s.length; i++) {  
                        list.add(Integer.parseInt(s[i].trim())); // 将String s中的内容添加到动态数组中  
                    }  
                }  
            } catch (IOException e) {  
                // TODO 自动生成的 catch 块  
                e.printStackTrace();  
            }  
            in.close();  
            input.close();  
        } catch (Exception e) {    
            e.printStackTrace();  
        }  
  
        return list;  
    }  
  
}  

归并排序

  
import java.io.BufferedReader;  
import java.io.File;  
import java.io.FileOutputStream;  
import java.io.FileReader;  
import java.io.IOException;  
import java.util.ArrayList;  
  
public class mergeSort {  
  
    public static void main(String[] args) {  
    
        double start_all = System.currentTimeMillis();  
        String path = "src/largeW.txt";  
        ArrayList<Integer> list=read(path);   
        double start = System.currentTimeMillis();  
        mergeSort(list);  
        double end = System.currentTimeMillis();  
        System.out.println("归并排序时间为: " + (end - start)+"毫秒");  
        // 写入txt文件  
        write(list);  
        System.out.println("写入完成");  
        double end_all = System.currentTimeMillis();  
        System.out.println("总运行时间为: " + (end_all - start_all)+"毫秒");  
    }  
    //创建并写入largeW_merge.txt文件  
    public static void write(ArrayList<Integer> list) {  
        File f = new File("src/txt/largeW_merge.txt");  
        FileOutputStream fou = null;  
        try {  
  
            fou = new FileOutputStream(f, true);  
  
            for (int i = 0; i < list.size(); i++) {  
                String s = String.valueOf(list.get(i));  
                String a = "" + s + "\t\n";  
                // byte []bytes=new byte[1024];  
     
                fou.write(a.getBytes());  
  
            }  
        } catch (Exception e) {  
            // TODO: handle exception  
            e.printStackTrace();  
        } finally {  
            try {  
                fou.close();  
            } catch (Exception e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
    }  
      
    //归并排序  
    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 (mid <= right) {    
            tmpArr[third++] = data.get(mid++);    
        }    
        while (left <= center) {    
            tmpArr[third++] = data.get(left++);    
        }    
 
        while (tmp <= right) {  
        data.set(tmp, tmpArr[tmp++]);  
        }    
    }    
      
      
    //读取文件到int数组  
    public static ArrayList read(String path) {  
        ArrayList<Integer> list = new ArrayList<Integer>();  
        BufferedReader input = null;  
        try {  
            FileReader in = new FileReader(path);  
            input = new BufferedReader(in);  
            String ss;  
            try {  
                while ((ss = input.readLine()) != null) {  
                    String[] s = ss.split("\r\n");  
                    for (int i = 0; i < s.length; i++) {  
                        list.add(Integer.parseInt(s[i].trim())); // 将String s中的内容添加到动态数组中  
                    }  
                }  
            } catch (IOException e) {  
             
                e.printStackTrace();  
            }  
            in.close();  
            input.close();  
        } catch (Exception e) {  
                 e.printStackTrace();  
        }  
  
        return list;  
    }  
  
} 
运行结果



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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值