发布时间:2025-06-24 19:38:50 作者:北方职教升学中心 阅读量:823
2)若数组有序且为降序,则:
T (N) =2N ∗ (N + 1)。
最坏情况:任意输⼊规模的最⼤运⾏次数(上界)。
3.1时间复杂度是衡量程序的时间效率,那么为什么不去计算程序的运⾏时间呢?
(1).因为程序运⾏时间和编译环境和运⾏机器的配置都有关系.
(2). 同⼀个算法程序,⽤⼀个⽼低配置机器和新⾼配置机器,运⾏时间也不同.
(3). 并且时间只能程序写好后测试,不能写程序前通过理论思想计算评估.
计算程序能代表增⻓量级的⼤概执⾏次数,复杂度的表⽰通常使⽤⼤O的渐进表⽰法。
3)若要查找的字符在字符串中间位置,则:因此:BubbleSort的时间复杂度取最差情况为: O(N2 )。
推导⼤O阶规则:
- 时间复杂度函数式T(N)中,只保留最⾼阶项,去掉那些低阶项,因为当N不断变⼤时,低阶项对结果影响越来越⼩,当N⽆穷⼤时,就可以忽略不计了。
平均情况:任意输⼊规模的期望运⾏次数。组织数据的⽅式,指相互之间存在⼀种或多种特定关系的数据元素的集合。平均和最坏情况。3.3.5 ⽰例5
// 计算BubbleSort的时间复杂度?voidBubbleSort(int*a,intn){assert(a);for(size_tend =n;end >0;--end){intexchange =0;for(size_ti =1;i <end;++i){if(a[i-1]>a[i]){Swap(&a[i-1],&a[i]);exchange =1;}}if(exchange ==0)break;}}
BubbleSort的时间复杂度取最差情况为: O(N2 )。
注意:函数运⾏时所需要的栈空间(存储参数、
how学好数据结构?(这可是干货,嘿嘿)
1,死磕代码。5.常⻅复杂度对比
6. 复杂度算法题
思路1
时间复杂度 O(n2 )
循环K次将数组所有元素向后移动⼀位(代码不通过原因:时间超时了)voidrotate(int*nums,intnumsSize,intk){while(k--){intend =nums[numsSize-1];for(inti =numsSize -1;i >0;i--){nums[i]=nums[i-1];}nums[0]=end;}}
思路2:
空间复杂度 O(n)
申请新数组空间,先将后k个数据放到新数组中,再将剩下的数据挪到新数组中。
⼤O的渐进表⽰法在实际中⼀般情况关注的是算法的上界,也就是最坏运⾏情况。3.3.4 ⽰例4
// 计算strchr的时间复杂度?constchar*strchr(constchar*str,intcharacter){constchar*p_begin =s;while(*p_begin !=character)//三种范围区间{if(*p_begin =='