java-冒泡排序与归并排序(第三周作业)
2014-03-27 23:17
267 查看
冒泡排序:
package sort; import java.io.BufferedReader; import java.io.FileReader; import java.io.FileWriter; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.io.File; public class BubbleSort { public static void main(String[] args) throws IOException { File f = new File("E:\\largeW.txt");//获取绝对路径 BufferedReader reader = new BufferedReader(new FileReader(f)); List<String> list = new ArrayList<String>(); String rLine = ""; while ((rLine = reader.readLine()) != null) { list.add(rLine); } int num[] = new int[list.size()]; for (int i = 0; i < list.size(); i++) { num[i] = Integer.parseInt(list.get(i).trim());// 提取整数,去除空格 } reader.close(); long startTime = System.currentTimeMillis(); // 冒泡排序开始时间 bubbleSort(num);//开始冒泡排序 long endTime = System.currentTimeMillis(); // 冒泡排序结束时间 //输出排序后的数据 for (int i = 0; i < list.size(); i++) { System.out.println(num[i]); } //将数组内数据写入到TXT文件中 FileWriter fileWriter = new FileWriter( "E:\\largeW_bubble.txt"); for (int i = 0; i < num.length; i++) { fileWriter.write(String.valueOf(num[i]) + " "); } fileWriter.flush(); fileWriter.close(); System.out.println("冒泡排序运行时间: " + (endTime - startTime) + "ms"); } public static void bubbleSort(int[] data){ for (int i = 0; i < data.length; i++) for (int j = 0; j < data.length; j++) if (data[i] < data[j]) { int t; t = data[i]; data[i] = data[j]; data[j] = t; } } }归并排序:
package sort1;import java.io.BufferedReader;import java.io.FileReader;import java.io.FileWriter;import java.io.IOException;import java.util.ArrayList;import java.util.List;public class MergeSort {public static void main(String[] args) throws IOException {// 文件绝对路径FileReader fr = new FileReader( "E:\\largeW.txt");BufferedReader br = new BufferedReader(fr);List<String> list = new ArrayList<String>();String rLine = "";while ((rLine = br.readLine()) != null) {list.add(rLine);}int num[] = new int[list.size()];for (int i = 0; i < list.size(); i++) {num[i] = Integer.parseInt(list.get(i).trim());// 提取整数,去除空格}br.close();long startTime = System.currentTimeMillis(); // 归并排序开始时间mergeSort(num); // 归并排序long endTime = System.currentTimeMillis(); // 归并排序结束时间//输出排序后的数据for (int i = 0; i < list.size(); i++) {System.out.println(num[i]);}System.out.print(list.size());//将数组内数据写入到TXT文件中FileWriter fileWriter = new FileWriter( "E:\\largeW_merge.txt");for (int i = 0; i < num.length; i++) {fileWriter.write(String.valueOf(num[i]) + " ");}fileWriter.flush();fileWriter.close();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);//print(data);}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 (mid <= right) {tmpArr[third++] = data[mid++];}while (left <= center) {tmpArr[third++] = data[left++];}// 将临时数组中的内容拷贝回原数组中// (原left-right范围的内容被复制回原数组)while (tmp <= right) {data[tmp] = tmpArr[tmp++];}}}
相关文章推荐
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业-冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序(运行冒泡排序)
- 第三周作业——冒泡排序和归并排序(只完成冒泡算法)
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序
- 第三周作业——冒泡排序和归并排序