有一个有序表为{1,3,9,12,32,41,45,62,75,77,82,95,100},当折半查找值为82的结点时,____次比较后查找成功。
正确答案:4
4次,分别和45、77、95、82进行比较
首先和中间值45比较,82比45***择右边,右边六个数和中间值77比较,82比77***择右边,右边3个数选择中间值95进行比较,82比95小选择左边,左边1个数和82比较相等
下列排序方法中,最坏情况下比较次数最少的是( )。
冒泡排序 简单选择排序 直接插入排序 堆排序
正确答案:D
A:冒泡排序最坏情况时间复杂度O(n^2)
B:简单选择排序最坏情况时间复杂度为O(n^2),时间复杂度和冒泡排序一样,但略优于冒泡排序
C:直接插入排序最坏情况时间复杂度为O(n^2),和A、B时间复杂度一样,但是性能优于A、B
D:堆排序最坏情况下时间复杂度为nlogn
以下能正确定义一维数组的选项是 ( )
int a[5]={0,1,2,3,4,5} char a={′A′,′B′,′C′} int a[5]="0123" char a[]={′0′,′1′,′2′,′3′,′4′,′5′,′\0′}
正确答案:D
设二维数组A[m][n],每个数组元素占用k个字节,第一个数组元素的存储地址是Loc(a[0][0]),求按行优先顺序存放的数组元素a[i][j](0 ≤i≤m-1,0≤j≤n-1 )的存储地址为
Loc(a[0][0])+((i-1)*n-1)*k Loc(a[0][0])+(i*n+j)*k Loc(a[0][0])+(j*m+i)*k Loc(a[0][0])+((j-1)*m+i-1)*k
正确答案:B
由于下标从0开始,先计算偏移量,i*n+j,再乘以字节既是(i*n+j)*k,最后加上第一个数组元素的地址,所以是(i*n+j)*k+Loc(a[0][0]),选B。这里要注意的是下标是从0开始的还是从1开始的,从1开始时,i,j都需要-1,从0开始时,不用减。
在下列排序方法中,()方法平均时间复杂度为O(N*log2N),最坏情况下时间复杂度为O(N2) ;( )方法所有情况下时间复杂度均为 O(N2)
插入排序,快速排序 希尔排序,堆排序 快速排序,堆排序 堆排序,快速排序
正确答案:C
给出以下定义:
Char x[]=”abcdefg”;
Char y[]={‘a’,’b’,’c’,’d’,’e’,’f’,’g’};
数组X和数组Y等价 数组X和数组Y的长度相同
数组X的sizeof运算值大于数组Y的sizeof运算值 数组X的sizeof运算值小于数组Y的sizeof运算值
正确答案:C
x如此定义会在后面添加\0,所以x比y多一个结束符号
在外排序过程中,对长度为n的初始序列进行"置换-选择"排序时,可以得到的最大初始有序段的长度不超过n/2()
正确答案:错误
外部排序,置换选择,在内存区保存一段数字,每次弹出内存区中最小的数字(这个数字不能比已经弹出的最大数字大),加入一个新数字,当内存区中不存在比弹出序列中最大数字还大的数字,即内存区中的数字都比上一个弹出的数字小,分段。构造第二个段,以此类推。如果待排元素有序,则只有一个归并段。长度N。
下列程序的功能是将 s 中的字符串按长度由小到大排列,请为横线处选择合适的程序()
下列程序的功能是将 s 中的字符串按长度由小到大排列,请为横线处选择合适的程序()
#include <stdio.h>
#include <string.h>
void f(char *p[],int n) {
char *t;
int i,j;
for(i=0;i<n-1;i++)
for(j=i+1;j<n;j++)
if(strlen(*(p+i))>strlen(*(p+j))) {
t=*(p+i);
*(p+i)=*(p+j);
*(p+j)=t;
}
}
main() {
char *s[]={“abc”,”abcdef”,”abbd”};
f(s,3);
for(int i=0;i<3;i++)
printf(“%s\n”,____);
}
正确答案:s[i]
题干 if(strlen(*(p+i))>strlen(*(p+i)))后一个应该是(p+j)
考察的是指针数组的遍历.
- A选项的数组名为指针,无法遍历数组元素。
- C、D是指针,元素的地址。
对于二分搜索法,下面描述正确的是()
可用于数组 可用于单链表 只能在已排序的数据上进行 最坏情况下时间复杂度是O(N*LogN)
正确答案:AC
二分查找首先要求数据是有序的,同时要求能随机访问数据元素, 有序数组可以, 链表不行,
二分查找因为每次都是从中间点开始查找,所以最坏情况是目标元素存在于最边缘的情况。最坏为O(LogN)
Which statement declares a variable a which is suitable for referring to an array of 50 string objects?(Java)
哪个语句声明了一个变量a,它适合引用一个包含50个字符串对象的数组?(Java)
char a[][]; String a[]; String[] a; Object a[50]; String a[50]; Object a[];
正确答案:BCF
在java 中,声明一个数组时,不能直接限定数组长度,只有在创建实例化对象时,才能对给定数组长度.。
如下,1,2,3可以通过编译,4,5不行。而String是Object的子类,所以上述BCF均可定义一个存放50个String类型对象的数组。
1. String a[]=new String[50];
2. String b[];
3. char c[];
4. String d[50];
5. char e[50];