答案链接
一、分析如下程序中 (1)~ (10)各语句的频度。(每个1分,共10分)
Ex( )
{
int i , j , t ;
(1) for( i=1 ; i<10 ; i++) //n =
(2) printf(“\n %d” , i ); //n =
(3) for(i=1; i<=2; i++) //n =
(4) printf(“\n”); //n =
(5) for(i=1; i<=9; i++) //n =
{
(6) for(j=1; j <= i ; j++) //n =
{
(7) t = i * j ; //n =
(8) printf(“%5d”,t); //n =
}
(9) for(j=1; j<3 ; j++) //n =
(10) printf(“\n”); //n =
}
}
- 分析如下程序段中指定语句的执行次数(共6分)。
有如下程序段:
x = 91 ; y = 100 ;
while(y > 0)
{
if(x > 100) {x -= 10 ; y -- ;}
else x ++ ;
}
问if 语句执行了多少次?(2分)
y--执行了多少次?(2分)
x ++执行了多少次?(2分)
- 回答问题(共25分)
书中16页的起泡排序如下:
void bubble_sort(int a[],int n){
//将a中整数序列重新排列成自小至大有序的整数序列。
for(i=n-1,change=TRUE;i>=1&&change;--i){
change=FALSE;
for(j=0;j<i;++j)
if(a[j]>a[j+1]{a[j]<-->a[j+1];change=TRUE; }
}
}//bubble_sort
- (共15分)分析该算法的最佳情况 ,最坏情况和平均情况下各自的时间复杂度(给出分析思路与过程)。
- 最佳情况的时间复杂度分析(5分):
- 最坏情况的时间复杂度分析(5分):
- 平均情况的时间复杂度分析(5分):
- (共10分)比较与C语言书中的起泡排序异同,并从时空效率角度说明谁更优。
四、完成如下选择题(每3分,共9分)。
1. 设f为原操作,则如下算法的时间复杂度是( )。
for (i = 1; i*i<= n; i++)
f;
- O(n) B. O( log2n ) C. O(n/ 2) D. 都不对
2. 算法的时间复杂度与( )有关。
A.问题的规模 B.计算机硬件性能
C.编译程序的质量 D.程序设计语言
3.有程序段:
for(i=n-1;i>=1;i--)
for(j=1;j<=i;j++)
if(A[j]>A[j+1])
A[j]与A[j+1]对换;
其中n为正整数,则算法在最坏情况下的时间复杂度为( )。
A.O(n) B.O(nlog2n) C. O(n3) D. O(n2)