数据结构:时间复杂度

本文探讨了如何通过事后分析法分析几种常见排序算法的时间复杂度。以一个包含100000个逆序排列数字的txt文件作为测试数据,使用Python等高级语言进行实验。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

利用几种常见的排序算法通过事后分析法来分析算法时间复杂度

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或其它高级语言生成即可!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值