第三周作业
2014-04-02 16:30
190 查看
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
public class sort {
public static ArrayList<Integer>
allnumber = new ArrayList<Integer>();
public static void main(String[]
args) {
readTxtFile("largeW.txt");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");
System.out.println("归并排序开始时间:"+df.format(new
Date()));
/*
bubbleSort(allnumber);
System.out.println("排序结束时间:"+df.format(new
Date()));
writetofile("largeW_bubble.txt",allnumber);
System.out.println("写入成功!");
*/
mergeSort(allnumber);
System.out.println("归并排序结束时间:"+df.format(new
Date()));
writetofile("largeW_merge.txt",allnumber);
System.out.println("写入成功!");
}
public static void readTxtFile(String
filePath){
try {
File file=new File(filePath);
if(file.isFile() && file.exists()){ //判断文件是否存在
InputStreamReader read = new InputStreamReader(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
while((lineTxt = bufferedReader.readLine()) != null){
lineTxt
= lineTxt.trim(); //去除空格
allnumber.add(Integer.parseInt(lineTxt));
}
read.close();
}else{
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
}
//冒泡排序
public static void bubbleSort(ArrayList<Integer>
num){
for(int index=0;index<num.size()-1;index++){
for(int start = 0;start<num.size()-index-1;start++){
if(num.get(start)>num.get(start+1)){
int temp = num.get(start);
num.set(start, num.get(start+1));
num.set(start+1, temp);
}
}
}
}
//归并排序
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只会执行其中一个)
while (mid <= right) {
tmpArr[third++] = data.get(mid++);
}
while (left <= center) {
tmpArr[third++] = data.get(left++);
}
// 将临时数组中的内容拷贝回原数组中
// (原left-right范围的内容被复制回原数组)
while (tmp <= right) {
data.set(tmp,
tmpArr[tmp++]);
}
}
public static void writetofile(String
path,ArrayList<Integer> num){
try {
File file=new File(path);
if(file.isFile() && file.exists()){ //判断文件是否存在
FileWriter
fileWriter=new FileWriter(path, true);
BufferedWriter
writer = new BufferedWriter(fileWriter);
for(int
index=0;index<num.size();index++){
writer.write(num.get(index).toString()+"\n");
}
writer.close();
}else{
file.mkdir();
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
}
}
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileWriter;
import java.io.InputStreamReader;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.Date;
public class sort {
public static ArrayList<Integer>
allnumber = new ArrayList<Integer>();
public static void main(String[]
args) {
readTxtFile("largeW.txt");
SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd
HH:mm:ss");
System.out.println("归并排序开始时间:"+df.format(new
Date()));
/*
bubbleSort(allnumber);
System.out.println("排序结束时间:"+df.format(new
Date()));
writetofile("largeW_bubble.txt",allnumber);
System.out.println("写入成功!");
*/
mergeSort(allnumber);
System.out.println("归并排序结束时间:"+df.format(new
Date()));
writetofile("largeW_merge.txt",allnumber);
System.out.println("写入成功!");
}
public static void readTxtFile(String
filePath){
try {
File file=new File(filePath);
if(file.isFile() && file.exists()){ //判断文件是否存在
InputStreamReader read = new InputStreamReader(new FileInputStream(file));
BufferedReader bufferedReader = new BufferedReader(read);
String lineTxt = null;
while((lineTxt = bufferedReader.readLine()) != null){
lineTxt
= lineTxt.trim(); //去除空格
allnumber.add(Integer.parseInt(lineTxt));
}
read.close();
}else{
System.out.println("找不到指定的文件");
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
}
//冒泡排序
public static void bubbleSort(ArrayList<Integer>
num){
for(int index=0;index<num.size()-1;index++){
for(int start = 0;start<num.size()-index-1;start++){
if(num.get(start)>num.get(start+1)){
int temp = num.get(start);
num.set(start, num.get(start+1));
num.set(start+1, temp);
}
}
}
}
//归并排序
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只会执行其中一个)
while (mid <= right) {
tmpArr[third++] = data.get(mid++);
}
while (left <= center) {
tmpArr[third++] = data.get(left++);
}
// 将临时数组中的内容拷贝回原数组中
// (原left-right范围的内容被复制回原数组)
while (tmp <= right) {
data.set(tmp,
tmpArr[tmp++]);
}
}
public static void writetofile(String
path,ArrayList<Integer> num){
try {
File file=new File(path);
if(file.isFile() && file.exists()){ //判断文件是否存在
FileWriter
fileWriter=new FileWriter(path, true);
BufferedWriter
writer = new BufferedWriter(fileWriter);
for(int
index=0;index<num.size();index++){
writer.write(num.get(index).toString()+"\n");
}
writer.close();
}else{
file.mkdir();
}
} catch (Exception e) {
System.out.println("读取文件内容出错");
e.printStackTrace();
}
}
}
相关文章推荐
- 第三周作业
- 吴恩达 DeepLearning 神经网络基础 第一课第三周编程题目及作业
- 第三周作业
- MongoDB 第三周作业――用java操作MongoDB之删除数组中的元素
- C语言第三周作业---单层循环
- 《实时控制软件设计》第三周作业
- machine-learning第三周 上机作业
- 第三周作业
- 第三周补充作业
- Coursera概率图模型(Probabilistic Graphical Models)第三周编程作业分析
- 第三周作业-实现随机点名的签到程序
- 第三周作业-循环与判断语句
- 第三周作业
- 第三周作业
- 《机电传动控制》第三周作业
- 计科1111-1114班第三周讲义、课外作业(截止日期:2014年3月27日23点-周四晚,学委飞信通知同学)
- 第三周作业(一)
- 第三周作业
- 第三周作业
- 第三周作业