您的位置:首页 > 其它

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

2014-06-07 15:47 543 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: