第三周作业——冒泡排序和归并排序
2014-03-31 23:38
369 查看
排序:对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort)
与 归并排序(mergeSort),把排序后的结果分别保存到largeW_bubble.txt 和 largeW_merge.txt 中,把两种排序结果的运行时间输出到屏幕中.
与 归并排序(mergeSort),把排序后的结果分别保存到largeW_bubble.txt 和 largeW_merge.txt 中,把两种排序结果的运行时间输出到屏幕中.
package sort; import java.io.BufferedReader; 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 { public static void main(String[] args)throws Exception{ FileInputStream f=new FileInputStream("F:/largeW.txt"); InputStreamReader o=new InputStreamReader(f); BufferedReader r=new BufferedReader(o); String s =null; String []str =null; int []data; int count =0; List strList = new ArrayList(); while((s=r.readLine())!=null){ strList.add(s); //向动态数组中添加从文件largeW.txt中读取的数据 } data = new int[strList.size()]; for (int i = 0; i < strList.size(); i++) { data[i] = Integer.parseInt(strList.get(i).trim()); //将strList中的String类型数据转化为int型数据并存放到data数组中 } long startTime=System.currentTimeMillis(); //获取排序开始时的时间 for(int j =1;j data[k]){ int t; t =data[j]; data[j] =data[k]; data[k] =t; } } //System.out.println(data[j]); } long endTime=System.currentTimeMillis(); //获取排序结束后的时间 OutputStreamWriter O = new OutputStreamWriter(new FileOutputStream("F:/largeW_bubble.txt")); System.out.println("冒泡排序时间为: "+(endTime-startTime)+"ms"); o.close(); } long startTime=System.currentTimeMillis(); mergeSort(data); long endTime=System.currentTimeMillis(); OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream("F:/largeW_merge.txt")); System.out.println("归并排序时间为: "+(endTime-startTime)+"ms"); } public static void mergeSort(int[] data) { sort(data, 0, data.length - 1); } public static void sort(int[] 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(int[] data, int left, int center, int right) { // 临时数组 int[] tmpArr = new int[data.length]; // 右数组第一个元素索引 int mid = center + 1; // third 记录临时数组的索引 int third = left; // 缓存左数组第一个元素的索引 int tmp = left; while (left <= center && mid <= right) { // 从两个数组中取出最小的放入临时数组 if (data[left] <= data[mid]) { tmpArr[third++] = data[left++]; } else { tmpArr[third++] = data[mid++]; } } // 剩余部分依次放入临时数组(实际上两个while只会执行其中一个) while (mid <= right) { tmpArr[third++] = data[mid++]; } while (left <= center) { tmpArr[third++] = data[left++]; } // 将临时数组中的内容拷贝回原数组中 // (原left-right范围的内容被复制回原数组) while (tmp <= right) { data[tmp] = tmpArr[tmp++]; } } }
相关文章推荐
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序(只完成冒泡算法)
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业-冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序(运行冒泡排序)
- 第三周作业——冒泡排序和归并排序(运行归并算法)
- 第三周作业——冒泡排序和归并排序