利用几种常见的排序算法通过事后分析法来分析算法时间复杂度
package day02;
import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.util.ArrayList;
import java.lang.Exception;
import day01.Bubble;
import day01.Insertion;
import day01.Selection;
public class sortCompare {
//调用插入排序和shell排序来比较优异性
//调用不同的方法完成测试
public static void main(String[] args) throws Exception{
//1.创建一个Arraylist的集合,用来保存读取出来的整数
ArrayList<Integer> list=new ArrayList<>();
//2.创建缓存读取流BufferedReader,用于读取数据并存储到ArrayList中
BufferedReader reader =new BufferedReader(new InputStreamReader(sortCompare.class.getClassLoader().getResourceAsStream("numbers.txt")));
//开始读取数据
String line=null;
while((line=reader.readLine())!=null ){//每次读取一行
//line是字符串,把line转换成integer存入到集合中
int i=Integer.parseInt(line);
list.add(i);
}
reader.close();
//3.把ArrayList集合转换成数组
Integer[] a=new Integer[list.size()];
list.toArray(a);
//4.调用测试代码完成测试
//InsertionTest(a);
mergeTest(a);
shellTest(a);
//bubbleTest(a);
//selectionTest(a);
//QuickTest(a); //堆溢出异常啊
}
//测试希尔排序
public static void shellTest(Integer[] a){
//1.获取执行之前的时间
long start=System.currentTimeMillis();
//2.执行算法代码
Shell.sort(a);
//3.获取执行之后的时间
long end=System.currentTimeMillis();
//4.算出程序执行的时间并输出
System.out.println("希尔排序执行的时间为:"+(end-start)+"毫秒");
}
//测试插入排序
public static void InsertionTest(Integer[] a){
//1.获取执行之前的时间
long start=System.currentTimeMillis();
//2.执行算法代码
Insertion.sort(a);
//3.获取执行之后的时间
long end=System.currentTimeMillis();
//4.算出程序执行的时间并输出
System.out.println("插入排序执行的时间为:"+(end-start)+"毫秒");
}
//测试归并排序
public static void mergeTest(Integer[] a){
//1.获取执行之前的时间
long start=System.currentTimeMillis();
//2.执行算法代码
merge.sort(a);
//3.获取执行之后的时间
long end=System.currentTimeMillis();
//4.算出程序执行的时间并输出
System.out.println("归并排序执行的时间为:"+(end-start)+"毫秒");
}
//测试选择排序
public static void selectionTest(Integer[] a){
//1.获取执行之前的时间
long start=System.currentTimeMillis();
//2.执行算法代码
Selection.sort(a);
//3.获取执行之后的时间
long end=System.currentTimeMillis();
//4.算出程序执行的时间并输出
System.out.println("选择排序执行的时间为:"+(end-start)+"毫秒");
}
//测试冒泡排序
public static void bubbleTest(Integer[] a){
//1.获取执行之前的时间
long start=System.currentTimeMillis();
//2.执行算法代码
Bubble.sort(a);
//3.获取执行之后的时间
long end=System.currentTimeMillis();
//4.算出程序执行的时间并输出
System.out.println("冒泡排序执行的时间为:"+(end-start)+"毫秒");
}
//测试快速排序
public static void QuickTest(Integer[] a){
//1.获取执行之前的时间
long start=System.currentTimeMillis();
//2.执行算法代码
Quick.sort(a);
//3.获取执行之后的时间
long end=System.currentTimeMillis();
//4.算出程序执行的时间并输出
System.out.println("快速排序执行的时间为:"+(end-start)+"毫秒");
}
}
实例中的测试数据是一个从100000到1之间的一个逆序排序的txt文本文档,可用python或其它高级语言生成即可!