数据结构(本)形考作业4
一、单项选择题(每小题2分,共40分)
题目1
对线性表进行二分查找时,要求线性表必须( )。 A.以顺序存储方式
B.以顺序存储方式,且数据元素有序 C.以链接存储方式,且数据元素有序 D.以链接存储方式 题目2
采用顺序查找方法查找长度为n的线性表时,每个元素的平均查找长度为( )。
A. (n+1)/2 B. n C. n/2 D. (n-1)/2 题目3
有一个长度为10的有序表,按折半查找对该表进行查找,在等概率情况下查找成功的平均比较次数为( )。
A. 31/10 B. 29/10 C. 26/10 D. 29/9 题目4
已知一个有序表为{11,22,33,44,55,66,77,88,99},则顺序查找元素55需要比较( )次。
A. 3 B. 6 C. 5 D. 4 题目5
有数据{53,30,37,12,45,24,96},从空二叉树开始逐个插入数据来形成二叉排序树,若希望高度最小,应该选择的序列是( )。
A. 45,24,53,12,37,96,30 B. 12,24,30,37,45,53,96 C. 37,24,12,30,53,45,96 D. 30,24,12,37,45,96,53 题目6
对于顺序存储的有序表{5,12,20,26,37,42,46,50,64},若采用折半查找,则查找元素26的比较次数是( )。
A. 6 B. 3 C. 4 D. 5 题目7
在所有的排序方法中,关键字比较的次数与记录初始排列秩序无关的是( )。
A. 直接插入排序 B. 直接选择排序 C. 冒泡排序 D. 希尔排序 题目8
从未排序序列中依次取出元素与已经排好序的序列中的元素作比较。将其放入已排序序列的正确的位置上,此方法称为( )。
A. 选择排序 B. 交换排序 C. 插入排序 D. 归并排序 题目9
依次将每两个相邻的有序表合并成一个有序表的排序方法称为( )。
A. 交换排序 B. 插入排序 C. 归并排序 D. 选择排序 题目10
当两个元素出现逆序的时候就交换位置,这种排序方法称为( )。
A. 交换排序 B. 插入排序 C. 选择排序 D. 归并排序 题目11
每次把待排序的区间划分为左、右两个子区间,其中左区间中记录的关键字均小于等于基准记录的关键字,右区间中记录的关键字均大于等于基准记录的关键字,这种排序称为( )。
A. 归并排序 B. 堆排序 C. 插入排序 D. 快速排序 题目12
一组记录的关键字序列为(46,20,30,79,56,38,40,84,90,110),利用快速排序,以第一个关键字为分割元素,经过一次划分后结果为( )。
A. 20,30,40,38,46,79,56,84,90,100 B. 30,20,40,38,46,84,56,79,90,100 C. 20,30 38,40,46,56,79,84,90,100 D. 40,20,30,38,46,56,79,84,90,110 题目13
在有序表{10,14,34,43,47,64,75,80,90}中,用折半查找法查找值80时,经( )次比较后查找成功。
A. 5 B. 2 C. 3
D. 4 题目14
对序列(49,38,65,97,76,13,47,50)采用直接插入排序法进行排序,要把第七个元素47插入到已排序中,为寻找插入的合适位置需要进行( )次元素间的比较。
A. 5 B. 6 C. 3 D. 4 题目15
排序方法中,从未排序序列中挑选元素,并将其依次放入已排序序列(初始为空)的一端的方法,称为( )排序。
A. 选择 B. 插入 C. 快速 D. 归并 题目16
一组记录的关键字序列为(26,59,36,18,20,25),利用堆排序的方法建立的初始小根堆为( )。
A. 26,59,36,18,20,25 B. 26,18,59,20,36,25 C. 18,20,36,59,26,25 D. 18,20,25,59,26,36 题目17
一组记录的关键字序列为(25,48,16,35,79,82,23,40,36,72),其中,含有5个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为( )。
A. 16,25,48,35,79,82,23,36,40,72 B. 16,25,35,48,23,40,79,82,36,72 C. 16,25,35,48,79,23,36,40,82,72 D. 16,25,35,48,79,82,23,36,40,72 题目18
已知10个数据元素为(54,28,16,34,73,62,95,60,26,43),对该数列从小到大排序,经过一趟冒泡排序后的序列为( )。
A. 16,28,34,54,62,60,73,26,43,95 B. 28,16,34,54,62,73,60,26,43,95 C. 16,28,34,54,73,62,60,26,43,95 D. 28,16,34,54,62,60,73,26,43,95 题目19
一组记录的关键字序列为(46,79,56,38,40,84),利用快速排序,以第一个关键字为分割元素,经过一次划分后结果为( )。
A. 40,38,46,79,56,84 B. 38,40,46,56,79,84 C. 40,38,46,56,79,84 D. 40,38,46,84,56,79 题目20
一组记录的关键字序列为(80,57,41,39,46,47),利用堆排序(堆顶元素是最小元素)的方法建立的初始堆为( )。
A. 39,80,46,47,41,57 B. 39,47,46,80,41,57 C. 41,39,46,47,57,80 D. 39,46,41,57,80,47
二、程序填空题(每题10分,2题,共20分。请点击正确选项,然后拖拽至相应的方框上)
题目21
以下函数是二叉排序树的查找算法,若二叉树为空,则返回根结点的指针,否则,返回值是指向树结点的结构指针p(查找成功p指向查到的树结点,不成功p指向为NULL)完成程序中的空格
typedef struct Bnode { int key;
struct Bnode *left; struct Bnode *right; } Bnode;
Bnode *BSearch(Bnode *bt, int k)
/* bt用于接收二叉排序树的根结点的指针,k用以接收要查找的关键字*/ { Bnode *p; if(bt==NULL) return (bt); p=bt;
while(p->key!=k) { if(k
else p=p->right; if(p==NULL) break; }
return(p; }
题目22
以下程序是折半插入排序的算法
设待排序的记录序列存放在a[1],…a[n]中,以a[0]作为辅助工作单元,程序是要把a[i] 插入到已经有序的序列a[1],…a[i-1]中。 void binsort (NODE a[ ],int n) { int x,i,j,s,k,m;
for (i=2;i<=n;i++) { a[0]=a[i]; x= a[i].key; s=1; j=i-1;
while (s<=j) { m=(s+j)/2