关于时间复杂度与空间复杂度

时间复杂度:即算法中执行基本操作的次数,对于非递归算法,主要是建立算法的基本操作的执行次数的求和表达式,然后确定“和函数”的增长次数。而对于递归算法,主要是建立算法的基本操作执行次数的递推关系式,然后确定他的增长次数。

空间复杂度:即运行所需要的额外存储空间数量。

常见的算法渐进效率类型:

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

posted @ 2013-03-16 22:10  mapleyuan  阅读(244)  评论(0编辑  收藏  举报