您的位置:首页 > 编程语言 > Java开发

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++];}}}  

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: