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

来源:互联网 发布:新网域名管理系统 编辑:程序博客网 时间:2024/05/22 00:21

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

0 0