排序算法
排序算法的介绍
排序也称排序算法,是将一组数据依据指定的顺序进行排序的过程
排序的分类
- 内部排序
- 外部排序:需要借助外部存储进行排序
常见的排序算法分类
算法的时间复杂度
时间频度:一个算法中的语句执行次数称为时间频度,记为T(n)
时间复杂度: 一般情况下,算法中的基本操作语句的重复执行次数是问题规模n的某个函数,用T(n)表示,若有某个辅助函数fn),使得当n趋近于无穷大时,T(n)/f(mn)的极限值为不等于零的常数,则称fn)是Tn)的同数量级函数。记作T(n)=O( f(n)),称O( f(n))/为算法的渐进时间复杂度,简称时间复杂度。
常见的时间复杂度
- 常数阶O(1)
- 对数阶O(log2n)
- 线性阶O(n)
- 线性对数阶O(nlog2n)
- 平方阶O(n2)
- 立方阶O(n3)
- k次方阶O(nk)
- 指数阶O(2n)
图解
时间复杂度对应的代码举例
常数阶
int i = 1;
int j = 2;
++i;
j++;
int a = i+j;
对数阶
int i = 1;
while(i<n){
i = i * 2;
}
线性阶
for(i=1;i<=n;i++){
j = i;
j++;
}
线性对数阶
for(i=1;i<n;i++){
while(i<n){
i = i * 2;
}
}
平方阶
for(int i=0;i<n;i++){
for(int j=0;j<n;j++){
m++;
}
}
立方阶和k次方阶同理
算法的空间复杂度简介
- 类似于时间复杂度的讨论,一个算法的空间复杂度(Space Complexity)定义为该算法所耗费的存储空间,它也是问题规模n的函数。
- 空间复杂度(Space Complexity)是对一个算法在运行过程中临时占用存储空间大小的量度。有的算法需要占用的临时工作单元数与解决问题的规模n有关,它随着n的增大而增大,当n较大时,将占用较多的存储单元
- 在做算法分析时,主要讨论的是时间复杂度。从用户使用体验上看,更看重的程序执行的速度。一些缓存产品(redis, memcache)和算法(基数排序)本质就是用空间换时间.