牛客练习题——4

有一个有序表为{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];

 

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值