第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)
来源:互联网 发布:freebsd 知乎 编辑:程序博客网 时间:2024/05/22 06:04
冒泡排序(BubbleSort)
基本思想:两两比较待排序数据元素的大小,发现两个数据元素的次序相反时即进行交换,直到没有反序的数据元素为止。
程序代码如下:
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
- 第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)
- 第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)
- 冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort)
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- SDImageCache.m 在xcode 5.1错误"Unused variable 'fileName'"
- 第二周作业2.2——随机生成一个n bit位的长整数
- NIM(1)一排石头的游戏
- 关于xargs cp中,如何确定拷贝的源和目的 (copied)
- stm32软件模拟I2C读取ADXL345三轴加速度值
- 第三周作业——冒泡排序(BubbleSort)与归并排序(MergeSort)
- 带通配符的数
- 黑马程序员——银行业务调度系统
- 用Android-X86和VirtualBox打造高性能Android开发环境
- Oracle Exists 用法
- js控制分页打印、打印分页
- MFC ADO 使用Oracle事务处理
- 对用户密码进行加盐处理
- Synchronized