当前位置: 首页 > 科技观察

Java编程内功——数据结构与算法《排序算法分类及介绍》

时间:2023-03-14 14:14:04 科技观察

介绍排序是将一组数据按指定顺序排列的过程分类内排序:是指将所有需要处理的数据加载到内存中的内部排序。常见的内部排序有:直接插入排序、希尔排序、简单选择排序、堆排序、冒泡排序、快速排序、归并排序、基数排序。外部排序:数据量太大,无法加载到内存中,需要外部存储进行排序。通过算法的时间复杂度来衡量一个程序(算法)的执行时间有两种方法:事后统计法是可行的,但存在两个问题:一是评估设计算法的运行性能,有必要实际运行该算法。二是获取时间的统计取决于计算机硬件\软件等环境因素。这样就需要在相同的状态下运行同一台计算机来比较哪种算法更快。预估法通过分析算法的时间复杂度来判断哪种算法更好。时间频率算法所花费的时间与算法中语句的执行次数成正比。无论哪种算法执行算法中的语句数量,都需要更多的时间。算法中语句执行的次数称为语句频率或时间频率。记录为T(n)。比如计算1到100所有数字的和,有两种算法inttotal=0;intend=100;//for循环计算for(inti=1;i<=end;i++){total+=i;}执行的次数取决于结束的长度。其T(n)=n+1.//直接计算total=(1+end)*end/2;直接计算只需要Execute一次,其T(n)=1。估计时间频率时注意:忽略常数项:如T(n)=2n+20和T(n)=2n,随着n变大,20可以忽略。忽略低阶项:比如T(n)=2n^2+3n+10和T(n)=2n^2,随着n变大,3n+10可以忽略。忽略系数:比如T(n)=5n^2+7n和T(n)=3n^2+2n,随着n变大,5和3可以忽略。时间复杂度一般来说,算法中基本运算语句的重复执行次数是问题规模n的函数,用T(n)表示,如果有辅助函数f(n),则当n趋近于无穷大,T(n)/f(n)的极限值是一个不等于零的常数,则称f(n)是与T(n)同量级的函数。记为T(n)=O(f(n)),O(f(n))称为算法的渐近时间复杂度,简称时间复杂度。T(n)不同,但时间复杂度可能相同。比如:T(n)=n^2+7n+6和T(n)=3n^2+2n+2,它们的T(n)不同,但是时间复杂度都是O(n^2)。计算时间复杂度法用一个常数1代替运行时所有的加法常数。在修改后的流水号函数中,只保留最高阶项。删除最高阶项的系数。常见的时间复杂度常数阶O(1)不管执行多少行代码,只要没有loop等复杂结构,那么这段代码的复杂度就是O(1)inti=1;intj=2;++我;j++;intm=i+j;上面的代码在执行的时候,它消耗的时间并不会随着某个变量的增长而增加,所以不管这类代码多长,哪怕有几万、几十万行,都可以用O(1)来表示它的时间复杂度。对数阶O(log2n)inti=1;while(i