如何计算算法的时间复杂度和空间复杂度?

mike088 2009-11-05 02:35:34
O(n/(lognloglogn))
o(n^(1/2)/logn)
o(n)
O(logn)
O(nlogn)
O(n^2)
O(n^3)
O(2^n)

是什么意思?是怎样算出来的?如何计算算法的时间复杂度和空间复杂度?很晕。。。

[code=C]例如快速排序
他的复杂度是怎样计算出来的?
void quick_sort(int *x, int low, int high)
{
int i, j, t;

if (low < high) /*要排序的元素起止下标,保证小的放在左边,大的放在右边。这里以下标为low的元素为基准点*/
{
i = low;
j = high;
t = *(x+low); /*暂存基准点的数*/

while (i<j) /*循环扫描*/
{
while (i<j && *(x+j)>t) /*在右边的只要比基准点大仍放在右边*/
{
j--; /*前移一个位置*/
}

if (i<j)
{
*(x+i) = *(x+j); /*上面的循环退出:即出现比基准点小的数,替换基准点的数*/
i++; /*后移一个位置,并以此为基准点*/
}

while (i<j && *(x+i)<=t) /*在左边的只要小于等于基准点仍放在左边*/
{
i++; /*后移一个位置*/
}

if (i<j)
{
*(x+j) = *(x+i); /*上面的循环退出:即出现比基准点大的数,放到右边*/
j--; /*前移一个位置*/
}
}

*(x+i) = t; /*一遍扫描完后,放到适当位置*/
quick_sort(x,low,i-1); /*对基准点左边的数再执行快速排序*/
quick_sort(x,i+1,high); /*对基准点右边的数再执行快速排序*/
}
}[/code]
...全文
2435 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyan521818 2011-05-23
  • 打赏
  • 举报
回复
最好情况下,时间复杂度为O(nlgn).用递归树来分析最好情况下的比较次数更简单。因为每次划分后左、右子区间长度大致相等,故递归树的高度为O(lgn),而递归树每一层上各结点所对应的划分过程中所需要的关键字比较次数总和不超过n,故整个排序过程所需要的关键字比较总次数C(n)=O(nlgn)
最坏情况,当每次分割的两个子序列中有一个为空,即初始序列有序(顺序或逆序),这时快速排序效率最低,时间复杂度为O(n^2)

sunican 2010-07-27
  • 打赏
  • 举报
回复
也在学习数据结构,郁闷哪,好多都不懂~~~
starcat 2009-11-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 liherun 的回复:]
这个应该  superdullwolf 来回答
[/Quote]大笨狼老师在算法方面很牛X哈
jernymy 2009-11-05
  • 打赏
  • 举报
回复
mark一下
xhd3767 2009-11-05
  • 打赏
  • 举报
回复
LS正解..
joaryyu 2009-11-05
  • 打赏
  • 举报
回复
曾经在数据结构中学过这类问题.
时间复杂度是要找算法中的基本操作重复执行的次数.
空间复杂度是要找除去输入和程序本身外的额外空间.

你搜一下,网上一搜一大堆有关这的东西.
liherun 2009-11-05
  • 打赏
  • 举报
回复
这个应该 superdullwolf 来回答
SATAN1122 2009-11-05
  • 打赏
  • 举报
回复
坐等高手来解释

19,468

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 图形处理/算法
社区管理员
  • 图形处理/算法社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧