1. 排序。对文件 largeW.txt(下载链接)中的数据,编程实现冒泡排序(方法名:bubbleSort) 与 归并排序(mergeSort),把排序后的结果分别保存到largeW_bubble.txt 和 largeW_merge.txt 中,把两种排序结果的运行时间输出到屏幕中(发博文时把运行时间的截图作为运行结果提交)。
================================================
package SYS3_1;
import java.io.*;
import java.util.*;
public class SYS3_1 {
//====冒泡排序
public static void bubbleSort(String[] arr,int len,int res,String a){
for(int i =0;i <len-1;i++){
for(int j =i+1;j<len;j++){
res=arr[i].compareTo(arr[j]);
if(res>0){
a=arr[i];
arr[i]=arr[j];
arr[j]=a;
}
}
}
}
//====归并算法
public static void partition(String[] arr,int head,int tail){
if(head < tail){
int mid = (head+tail )/2;
partition(arr,head,mid);//前半部分
partition(arr,mid+1,tail);//后半部分
mergeSort(arr,head,tail,mid);
}
}
//归并排序
public static void mergeSort(String[] arr,int head,int tail,int mid){
String[] tArr = new String[tail];//总数
int tArrIndex = 0;
int part1ArrIndex = head;//前部
int part2ArrIndex = mid+1;//后部
int l;
while((part1ArrIndex <= mid)&&(part2ArrIndex <= tail)){
l = arr[part1ArrIndex].compareTo(arr[part2ArrIndex]);//对比数据长度
if(l < 0){
tArr[tArrIndex ++] = arr[part1ArrIndex ++];
}
else{
tArr[tArrIndex ++] = arr[part2ArrIndex ++];
}
}
while(part1ArrIndex < mid){
tArr[tArrIndex ++] = arr[part1ArrIndex ++];
}
while(part2ArrIndex < mid){
tArr[tArrIndex ++] = arr[part2ArrIndex ++];
}
}
//====主程序
public static void main(String[] args) throws Exception{
try{
FileReader FR =new FileReader("E:\\largeW.txt");
BufferedReader BR =new BufferedReader(FR);
int len=0;
while(BR.readLine() !=null){
len++;
}
System.out.print("文件数据总量: ");
System.out.println(len);
String[] s=new String[len];
int t =0;
String r1 ="";
FileReader FR1 =new FileReader("E:\\largeW.txt");
BufferedReader BR1=new BufferedReader(FR1);
while((r1=BR1.readLine()) !=null){
s[t]=r1;
t++;
}
System.out.println("文本数据量: "+len);
System.out.print("请输入要运算的数据量(应小于上面数据量): ");
Scanner sc =new Scanner(System.in);
int len1=sc.nextInt();
int res = 0;
String a = null;
long startTime =System.currentTimeMillis();//冒泡排序开始时间
//进行冒泡排序
bubbleSort(s,len1,res,a);
long endTime =System.currentTimeMillis();//冒泡排序程序结束
System.out.println("冒泡排序运行时间: "+(endTime -startTime) +"ms");
//对冒泡排序结果输出
FileWriter fw =new FileWriter("E:\\largeW_bubble.txt",true);
BufferedWriter writer =new BufferedWriter(fw);
for(int i=0;i<len;i++){
writer.write(s[i]+"\r\n");
}
long startTime1=System.currentTimeMillis();//递归排序开始时间
//进行递归排序
partition(s,0,len1-1);
long endTime1=System.currentTimeMillis();//递归排序结束时间
System.out.println("归并排序运行时间: "+(endTime1-startTime1)+"ms");
//对归并排序结果输出
FileWriter fw1=new FileWriter("e:\\largeW_merge.txt",true);
BufferedWriter writer1=new BufferedWriter(fw1);
for(int i=0;i<len1;i++){
writer1.write(s[i]+"\r\n");
}
}
catch(IOException e){
System.out.println("程序错误,请重新运行,输入合理数据!");
}
}
}
================================
运行结果
===================
排序结果:
http://pan.baidu.com/s/1bnemVzp