您的位置:首页 > 其它

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

2014-03-27 10:33 387 查看
1. 冒泡排序

package suanfa;

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 bubbleSort {
public static void main(String[] args) throws IOException {
// 文件绝对路径
FileReader fr = new FileReader(
"F:\\largeW.txt");
BufferedReader br = new BufferedReader(fr);
List<String> list = new ArrayList<String>();
String rLine = "";
while ((rLine = br.readLine()) != null) {
list.add(rLine);
}
int number[] = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
number[i] = Integer.parseInt(list.get(i).trim());// 逐个进行转换,剔除空格
}
br.close();
long startTime = System.currentTimeMillis(); // 获取开始时间
// 冒泡排序
bubbleSort(number);
long endTime = System.currentTimeMillis(); // 获取结束时间

//输出排序后的数据
for (int i = 0; i < list.size(); i++) {
System.out.println(number[i]);
}
//将数组内数据写入到TXT文件中
FileWriter fileWriter = new FileWriter(
"F:\\largeW_bubble.txt");
for (int i = 0; i < number.length; i++) {
fileWriter.write(String.valueOf(number[i]) + " ");
}
fileWriter.flush();
fileWriter.close();
System.out.println("冒泡排序运行时间: " + (endTime - startTime) + "ms");
}
public static void bubbleSort(int r[],int n){
exchange=n;
while(exchange!=0)
{
bound=exchange;exchange=0;
t = data[i];
data[i] = data[j];
data[j] = t;
}
}
}




 归并排序
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(
"F:\\largeW.txt");
BufferedReader br = new BufferedReader(fr);
List<String> list = new ArrayList<String>();
String rLine = "";
while ((rLine = br.readLine()) != null) {
list.add(rLine);
}
int number[] = new int[list.size()];
for (int i = 0; i < list.size(); i++) {
number[i] = Integer.parseInt(list.get(i).trim());// 逐个进行转换,剔除空格
}
br.close();
long startTime = System.currentTimeMillis(); // 获取开始时间
// 归并排序
mergeSort(number);
long endTime = System.currentTimeMillis(); // 获取结束时间
//输出排序后的数据
for (int i = 0; i < list.size(); i++) {
System.out.println(number[i]);
}
System.out.print(list.size());
//将数组内数据写入到TXT文件中
FileWriter fileWriter = new FileWriter(
"F:\\largeW_merge.txt");
for (int i = 0; i < number.length; i++) {
fileWriter.write(String.valueOf(number[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只会执行其中一个)
while (mid <= right) {
tmpArr[third++] = data[mid++];
}
while (left <= center) {
tmpArr[third++] = data[left++];
}
// 将临时数组中的内容拷贝回原数组中
// (原left-right范围的内容被复制回原数组)
while (tmp <= right) {
data[tmp] = tmpArr[tmp++];
}
}
}










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