关于时间复杂度与空间复杂度
时间复杂度:即算法中执行基本操作的次数,对于非递归算法,主要是建立算法的基本操作的执行次数的求和表达式,然后确定“和函数”的增长次数。而对于递归算法,主要是建立算法的基本操作执行次数的递推关系式,然后确定他的增长次数。
空间复杂度:即运行所需要的额外存储空间数量。
常见的算法渐进效率类型:
0(1) : 即常量
O(log n):即对数
O(n):即线性,常见的如顺序表查找
O(n log n):常见的如合并排序和快排的平均效率
O(n!):即阶乘,完全排列算法
附:一道比较典型的笔试题目:一个未排序的整数数组,有正数也有负数,输出一个负数在前面,整数在后面的数组,正负数无序,要求时间复杂度o(n),空间复杂度o(1)
例如
input 1,-1,4,9,-3
output -1,-3,1,4,9
解法:
思路一:
while(head<end){
while(a[head]<0)
head++;
while(a[end]>0)
end--;
exchange(a[head],a[end])
}
思路二:
通过类链表的形式实现,即从头开始判断是否是正数,如果是就往后移动一位,继续判断,如果不是就把其移动到最前面非正数为止。如下:
第0遍:1,-1,4,9,-3
-1,1,4,9,-3
-1,-3,1,4,9