单项选择题13. 执行下列程序的输出结果是______。
#include<stdio.h>
main()
{int i,j,x=0,y=0;
for(i=0;i<2,i++)
{ for(j=0;j<3;j++)
x++;x-=j;
}
y=i+j;
printf("x=%d,y=%d\n",x,y);
}
- A.x=0,y=3
- B.x=0,y=5
- C.x=1,y=3
- D.x=1,y=5
A B C D
B
[解析] 本题考查C语言中for循环结束后循环变量的取值。第一次执行外循环时i=0,退出内层循环时j=3,x=3,再执行x-=j时得x=0;第二次执行外循环时i=1,退出内层循环时i=3,x=3,执行x-=j时得x=0,退出外层循环时i=2,j=3,执行y=i+j得y=5。
22. 下列排序方法中,最坏情况下时间复杂度(即比较次数)低于0(n
2)的是______。
- A.快速排序
- B.希尔排序
- C.简单插入排序
- D.冒泡排序
A B C D
B
[解析] 对长度为n的线性表排序,下表为常用排序方法最坏情况的时间复杂度:
方法
|
最坏情况时间
|
冒泡排序
|
0(n2)
|
简单插入排序
|
0(n2)
|
简单选择排序
|
0(n2)
|
快速排序
|
0(n2)
|
堆排序
|
0(nlog2n)
|
上表中未包括希尔排序,因为希尔排序的时间效率与所取的增量序列有关,如果增量序列为:d
1=n/2,d
i+1=d
i/2,在最坏情况下,希尔排序所需要的比较次数为0(n
1.5)。最坏情况下,时间复杂度低于0(n
2)的排序算法有堆排序和希尔排序。B选项正确。