数据结构学习(六)----------排序算法
一、排序算法的介绍
1.简介
排序也称排序算法,排序是将一组数据,按照指定的顺序排列的过程
2.排序的分类
- 内部排序 指将需要处理的所有数据都加载到内部存储器中进行排序
- 外部排序 数据量过大,无法全部加载到内存中,需要借助外部存储进行排序
3.常见的排序算法分类
4.算法的时间复杂度
- 事后统计的方法 这种方法可行,但是有两个问题:一是想对设计算法的运行性能进行评测,需要实际运行该程序;二是所得时间的统计量依赖于计算机的硬件、软件等环境因素,这种方式,要在同一台计算机的相同状态下运行,才能比较哪个算法速度更快
- 事前估算的方法 通过分析某个算法的时间复杂度来判断哪个算法更优
时间频度:
一个算法花费的时间与算法中语句的执行次数成正比,哪个算法中语句执行次数多,它花费时间就多。一个算法中的语句执行次数称为语句频度或时间频度。记为T(n)
时间复杂度:
- 一般情况下,算法中的基本操作语句的重复执行次数是问题规模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)=n2+7n+6与T(n)=3n2+2n+2它们的T(n)不同,但时间复杂度相同,都为O(n^2)
- 计算时间复杂度的方法:
-
用常数1代替运行时间中的所有加法常数 修改后的运行次数函数中,只保留最高阶项 去除最高阶项的系数
常见的时间复杂度:
- 常数阶O(1)
- 对数阶O(log2N)
- 线性阶O(n)
- 线性对数阶O(nlog2N)
- 平方阶O(n^2)
- 立方阶O(n^3)
- k次方阶O(n^k)
- 指数阶O(2^n)
示例图:
说明:
-
常见算法的时间复杂度由小到大依次为:O(1)<O(log2N)<O(n)<O(nlog2N)<O(n2)<O(n3)<O(nk)<O(2n),随着问题规模n的不断扩大,上述时间复杂度不断增大,算法的执行效率越低 尽可能避免使用指数阶的算法
算法的平均时间复杂度和最坏时间复杂度:
算法的空间复杂度
下一篇:
23种设计模式之六大原则