数据结构练习9.docx

上传人:b****8 文档编号:10224592 上传时间:2023-02-09 格式:DOCX 页数:17 大小:573.86KB
下载 相关 举报
数据结构练习9.docx_第1页
第1页 / 共17页
数据结构练习9.docx_第2页
第2页 / 共17页
数据结构练习9.docx_第3页
第3页 / 共17页
数据结构练习9.docx_第4页
第4页 / 共17页
数据结构练习9.docx_第5页
第5页 / 共17页
点击查看更多>>
下载资源
资源描述

数据结构练习9.docx

《数据结构练习9.docx》由会员分享,可在线阅读,更多相关《数据结构练习9.docx(17页珍藏版)》请在冰豆网上搜索。

数据结构练习9.docx

数据结构练习9

习题

10.1单项选择题。

(1)排序方法的时间效率主要用排序过程中——来衡量。

A.排序趟数的多少

B.参加排序的序列中元素的多少

D.排序过程中元素移动或者交换的次数

D.排序过程中元素之间的比较次数

(2)从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放在已排序序列中的合适位置,这种排序方法称为——。

A.选择排序法B.插入排序法

C.泡排序法D.堆积排序法

(3)每一趟排序从未排序序列中挑选一个值最小的元素,然后将其放在已排序序列的右端,这种排序方法称为——。

A.选择排序法B.插入排序法

C.快速排序法,D.谢尔排序法

(4)从未排序序列中任选出一个元素,该元素将当前参加排序的序列分成前后两个部分,前一部分中所有元素均小于等于所选元素,后一部分中所有元素均大于等于所选元素,而

所选元素处在排序的最终位置,然后分别对被分成的两部分中元素个数超过1的部分重

复上述过程,直至排序结束。

这种排序方法称为——。

A.选择排序法B.插入排序法

C.快速排序法D.二路归并排序法

(5)与直接插入排序方法比较,折半插入排序方法减少了排序过程中的——。

A.排序趟数D.元素之间的比较次数

C.元素的移动次数D.辅助空间

(6)在所学过的排序方法中,排序趟数与序列的原始状态有关的方法是——。

A.选择排序法B.谢尔排序法

C.堆积排序法D.泡排序法

(7)对序列(49,38,65,97,76,13,47,50)采用折半插入排序法进行排序,当把第七个元素47插入到已排序序列中,为寻找插入的合适位置需要进行——次元素间的比较。

A.3B.4C.5D.6

(8)若对序列(tang,deng,an,wang,shi,bai,fang,1iu)采用选择排序法按字典顺序进行排序,下面给出的四个序列中,——是第三趟的结果。

A.an,bai,deng,wang,tang,fang,shi,1iu

B.an,bai,deng,wang,shi,tang,fang,liu

C.an,bai,deng,wang,shi,fang,tang,1lu

D.an,bai,deng,wang,shi,1iu,tang,fang

(9)对于序列(49,38,65,97,13,27,50)按从小到大进行排序,——是初始步长d=4的谢尔排序法第一趟的结果。

A.49,76,65,13,27,50,97,38

B.3,27,38,49,50,65,76,97

C.97,76,65,50,49,38,27,13

D.49,13,27,50,76,38,65,97

(10)对序列(Q,D,F,X,A,P,N,B,Y,M,C,W)采用二路归并排序,下面的四个序列中——是第三趟的结果。

A.A,B,D,F,N,P,Q,X,C,W,M,Y

B.A,B,F,D,N,P,Q,X,C,M,W,Y

C.A,B,D,F,P,Q,X,N,C,M,W,Y

D.A,B,D,F,N,P,Q,X,C,M,W,Y

(11)对具有n个元素的序列采用选择排序法排序,排序趟数为——。

A.nB.n-1C.n+lD.Llog2n』

(12)对具有n个元素的序列采用泡排序法排序,排序趟数为——。

A.nB.n-1C.[1,n]D.[1,n-1]

(13)对具有n个元素的序列采用堆积排序法排序,排序趟数为——。

A.nB.Lnlog2nJC.L10g2nJD.n-1

(14)根据(大顶)堆积的定义,下面的四个序列中——是一个堆积。

A.75,65,30,15,25,45,20,10

B.75,65,45,10,30,25,20,15

C.75,45,65,30,15,25,20,10

D.75,45,65,10,25,30,20,15

(15)插入排序法的时间花费主要取决于元素间的比较次数,若具有n个元素的序列初始时已经是一个递增序列,则排序过程中一共要进行——次这种比较。

A.nB.n-1C.n(n-1)/2D.n2

(16)插入排序法的时间花费主要取决于元素间的比较次数,若具有n个元素的序列初始时为一个递减序列,则排序过程中一共要进行——次元素间的比较。

A.nB.n-1C.n(n-1)/2D.n2

(17)若——,则称这样的排序方法为非稳定性排序方法。

A.排序前后,值相同的元素的先后相对位置可能会颠倒

B.排序前后,值相同的元素的先后相对位置一定会颠倒

C.对同一个序列,每次排序的结果可能不相同

D.排序结果不可预测

(18)下面四种排序方法中,——是一种稳定性排序方法。

A.插入排序法B.选择排序法

C.快速排序法D.谢尔排序法

(19)下面四种排序方法中,——占用的辅助空间最多。

A.插入排序法B.堆积排序法

C.快速排序法D.二路归并排序法

(20)在序列中各元素已经排好序的情况下,采用——方法可以尽可能快地结束排序。

A,插入排序B.泡排序C.快速排序D.堆积排序

(21)在序列中各元素已经排好序的情况下,采用——方法的时间效率最低。

A。

插入排序B.泡排序C.快速排序D.堆积排序

(22)在序列中各元素已经排好序的情况下,采用——方法时元素的移动次数最少。

A。

选择排序B.快速排序C.堆积排序D.归并排序

(23)若序列的原始状态为9,8,7,6,5,4,3,2,1,要想获得比较好的时间效率,不应该采用下列四种排序方法中的——方法。

A。

谢尔排序B.快速排序C.堆积排序D.归并排序

(24)若序列的原始状态为1,2,3,4,5,10,6,7,8,9,要想使得排序过程中元素的比较次数最少,应该采用——方法。

A,插入排序B.选择排序C.谢尔排序D.泡排序

(25)当参加排序的数据量较大,元素的分布又比较随机,并且无排序稳定性要求,宜选择_____.

A。

插入排序法B.选择排序法C.快速排序法D.堆积排序法10.2请以关键字序列{503,87,512,75,93,170,365,602,612}为例,分别写出执行以下排序算法时每一趟排序的结果,并分别统计每一趟排序过程中所进行的关键字比较的次数。

(1)插入排序;

(2)谢尔排序;

(3)堆积排序;

(4)二路归并排序。

10.3什么是堆积?

请根据堆积的定义和堆积的构造方法写出对应于序列{12,18,4,36,23,41,20,50,19}的初始堆积。

10.4已知序列为{12,2,16,30,8,28,4,10,20,6},请分别写出采用下列排序方法进行排序时每一趟结束的结果。

(1)选择排序法;

(2)泡排序法;

(3)快速排序法;

(4)基数排序法。

10.5设有10000个元素组成的无序序列,希望尽快挑选出其中前10个(仅挑出前10个㈠最大值元素,在不改变已有算法结构的前提下,以下几种内排序算法中哪一种最合适?

为什么?

(1)选择排序法;

(2)快速排序法;

(3)堆积排序法;

(4)泡排序法。

10.6请写出快速排序法的非递归算法。

10.7请写出用带头结点的线性链表作为存储结构时的选择排序算法。

设链表中头结点的指针为list;要求算法中不得使用除链表以外的其他链结点空间,也不得改变链结点数据域内容。

10.8请写出用带头结点的双向循环链表作为存储结构时的插入排序算法。

设头结点指针为list;算法中不得使用除链表外的其他链结点空间,也不得改变链结点数据域内容。

10.9请回答在你所学过的内排序方法中,哪些方法是稳定的?

哪些方法是不稳定的?

并为每一种不稳定的排序方法举出一个不稳定的实例。

10.10选择排序法与堆积排序法每一趟排序都是从当前未排好序的元素中选出一个元素,而一般情况下堆积排序法的时间效率远比选择排序法的时间效率要高,为什么?

10.11若n个值各不同的元素存在于数组A[n]中,则可按如下所述过程实现的排序方法称为计数排序法:

另设一个数组B[n](初值均为0),对A中每个元素A[i],统计A中值比它小的元素的个数并存于B[i]中,则与B[i]0对应的元素A[i]必为A中值最小的元素;然后,根据B[i]值的大小将A中元素重新排列(即根据BC门确定A[i]的排序位置)。

请编写一算法,实现上述排序方法。

10.12请为下列每种情况选择合适的内排序方法:

(1)n=30,且要求最坏情况下速度最快;

(2)n=30,且要求既要快,又要排序稳定;

(3)n=1000,要求平均情况下速度最快;

(4)n=1000,要求最坏情况下速度最快;

(5)n=1000,要求既要快,又要最节省存储空间。

历年考试题

12.当在二叉排序树中插入一个新结点时,若树中不存在与待插入结点的关键字相同的结点,且新结点的关键字小于根结点的关键字,则新结点将成为(   )

A.左子树的叶子结点B.左子树的分支结点

C.右子树的叶子结点D.右子树的分支结点

13.希尔排序的增量序列必须是(   )

A.递增的B.随机的

C.递减的D.非递减的

14.如果在排序过程中,每次均将一个待排序的记录按关键字大小加入到前面已经有序的子表中的适当位置,则该排序方法称为(   )

A.插入排序B.归并排序

C.冒泡排序D.堆排序

2.设某二维数组A[1..n,1..n],则在该数组中用顺序查找法查找一个元素的时间复杂性的量级为(   )

A.O(log2n)B.O(n)

C.O(nlog2n)D.O(n2)

14.下列关键码序列中,属于堆的是(   )

A.(15,30,22,93,52,71)B.(15,71,30,22,93,52)

C.(15,52,22,93,30,71)D.(93,30,52,22,15,71)

15.已知10个数据元素为(54,28,16,34,73,62,95,60,26,43),对该数列按从小到大排序,经过一趟冒泡排序后的序列为(   )

A.16,28,34,54,73,62,60,26,43,95

B.28,16,34,54,62,73,60,26,43,95

C.28,16,34,54,62,60,73,26,43,95

D.16,28,34,54,62,60,73,26,43,95

14.一组记录的键值为(46,74,18,53,14,20,40,38,86,65),利用堆排序的方法建立的初始堆为(   )

A.(14,18,38,46,65,40,20,53,86,74)

B.(14,38,18,46,65,20,40,53,86,74)

C.(14,18,20,38,40,46,53,65,74,86)

D.(14,86,20,38,40,46,53,65,74,18)

15.对序列(22,86,19,49,12,30,65,35,18)进行一趟排序后得到的结果如下:

(18,12,19,22,49,30,65,35,86),则可以认为使用的排序方法是(   )

A.选择排序B.冒泡排序

C.快速排序D.插入排序

12.在最好和最坏情况下的时间复杂度均为O(nlogn)且稳定的排序方法是()

A.快速排序B.堆排序C.归并排序D.基数排序

13.不可能生成右图所示二叉排序树的关键字序列是()

A.45312

B.42531

C.45213

D.42315

 

14.ALV树是一种平衡的二叉排序树,树中任一结点的()

A.左、右子树的高度均相同B.左、右子树高度差的绝对值不超过1

C.左子树的高度均大于右子树的高度D.左子树的高度均小于右子树的高度

15.在VSAM文件的控制区间中,记录的存储方式为()

A.无序顺序B.有序顺序

C.无序链接D.有序链接

3、某顺序存储的表格,其中有90,000个元素,已按关键项的植的上升顺序排列。

现假定对各个元素进行查的概率是相同的,并且各个元素的关键项的值皆不相同。

用顺序查找法查找时,平均比较次数约为_A_,最大比较次数为_B_。

现把90,000个元素按排列顺序划分成若干组,使每组有g个元素(最后一组可能不足g个)。

查找时,先从第一组开始,通过比例各组的最后一个元素的关键项的值,找到欲查找的元素所在的组,然后再用顺序查找法找到欲查找的元素。

在这种查找法中,使总的平均比较次数最小的g是_C_,此时的平均比较次数是_D_。

当g的值大于等于90,000时,此方法的查找速度接近于_E_。

 

供选择的答案

A、B:

①25,000 ②30,000③45,000 ④90,000

C、D:

①100   ②200③300    ④400

E:

①快速分类法 ②斐波那契查找法

③二分法   ④顺序查找法

(试题2)

堆是一种特殊的数据结构,__A__是一个堆,堆排序是一种__B__排序,m个元素进行堆排序时,其时间复杂性为__C__。

  排序的算法很多,若按排序的稳定性和不稳定性分类,则__D__是不稳定排序。

  外排序是指__E__。

供选择的答案 

  A:

①19,75,34,26,97,56②97,26,34,75,19,56

    ③19,56,26,97,34,75④19,34,26,97,56,75

  B:

①归并  ②交换③选择  ④插入

  C:

①o(m)  ②o(m2)③o(log2m)④o(mlog2m)

  D:

①冒泡排序②归并排序③直接插入排序④希尔(shell)排序

  E:

①用机器指令直接对硬盘中需排序数据排序

    ②把需排序数据,用其他大容量机器排序

    ③把外存中需排序数据一次性调入内存,排好序后,再输回外存

    ④对外存中大于内存允许空间的需排序的数据,通过多次内外存间的交换实现排序。

试题6

  堆是一种有用的数据结构。

例如关键码序列_A_是一个堆。

       

堆排序是一种_B_排序,它的一个基本问题是如何建堆,常用的建堆算法是1964年Floyd提出的,_C_对含n个元素的序列进行排序时,堆排序的时间复杂性是_D_,所需的附加存储结点是_E_。

               

供选择的答案

  A:

①16,72,31,23,94,53②94,53,31,72,16,53

③16,53,23,94,31,72④16,31,23,94,53,72

⑤94,31,53,23,16,72

B:

①插入   ②选择   ③交换  ④基数  ⑤归并 

  C:

①淘汰法  ②筛选法  ③递推法 ④LRU算法      

D、E:

①O(nlog2n)②O(n)③O(log2n)④O(n2)⑤O

(1)

(试题1)

在排序算法中,两两比较待排序的记录,当发现不满意顺序要求时,变更它们的相对位置,这就是__A__排序。

每次从未排序的记录中挑出最小(或最大)关键码值的记录,加入到已排序记录的末尾,这是__B__就组成一个堆,堆排序的平均执行时间和需附加的存储结点分别为__E__。

供选择的答案

A~C:

①插入②枚举③交换④归并

⑤基数⑥选择⑦希尔

D:

①20、76、35、23、80、54②20、54、23、80、35、76

③80、23、35、76、20、54④20、35、23、80、54、76

E:

①O(n2)和O

(1)②O(nlog2n)和O

(1)

③O(nlog2n)和O(n)④O(n2)和O(n)

23.若希望只进行8趟排序便能在4800个元素中找出其中值最小的8个元素,并且要求排序过程中所进行的关键字比较次数尽可能少,则应该选用________________排序方法。

27.在待排序的n个记录中任取一个记录,以该记录的键值作为标准,将所有记录分为两组,使得第一组中各记录的键值均小于或等于该键值,第二组中的各记录的键值均大于该键值;然后将该记录排在两组中间。

再对所分成的两组分别使用上述方法,直到所有记录都排在适当位置为止。

这种排序方法称为________________。

28.在对一组记录关键字(54,38,96,23,15,72,60,45,83)进行冒泡排序时,整个冒泡排序过程中需进行________________趟才能完成。

23.对关键字序列(52,80,63,44,48,91)进行一趟快速排序之后得到的结果为________。

24.由10000个结点构成的二叉排序树,在等概率查找的假设下,查找成功时的平均查找长度的最大值可能达到________。

28.对关键字序列(72,87,61,23,94,16,05,58)进行堆排序,使之按关键字递减次序排列。

请写出排序过程中得到的初始堆和前三趟的序列状态。

初始堆:

________

第1趟:

________

第2趟:

________

第3趟:

________

(3)给定序列{100,86,48,73,35,39,42,57,66,21},按堆结构的定义,则它一定(⑤)堆。

(4)在进行直接插入排序时,其数据比较次数与数据的初始排列(⑥)关;而在进行直接选择排序时,其数据比较次数与数据的初始排列(⑦)关。

33.已知序列(503,87,512,61,908,170,897,275,653,462)请给出采用快速排序法作升序排序时的每一趟的结果。

(8分)

29.已知R[1..8]中的元素依次为(12,5,9,20,6,31,24,27),写出按算法MergeSortDC 对R进行自顶向下的二路归并排序过程中,前5次调用函数Merge(R,low,mid,high)时参数low,mid和high的值。

voidMergeSortDC(intR[],intlow,intmid,inthigh)

{

intmid;

if(low

{

mid=(low+high)/2;

MergeSortDC(R,low,mid);

MergeSortDC(R,mid+1,high);

Merge(R,low,mid,high);

}

}//MergeSortDC

 

(1)第一次调用时的参数值;

 

(2)第二次调用时的参数值;

(3)第三次调用时的参数值;

(4)第四次调用时的参数值;

(5)第五次调用时的参数值;

33.已知整形数组L[1..8]中的元素依次为(9,8,5,7,6,3,2,1),阅读下列函数,并写出执行函数调用 sort(L,8)时,对L进行的头两趟(pass分别为0和1)处理结果。

 Voidsort(intR[],intn)

{

 intpass=0,k,exchange,x;

 do{

 k=pass%2+1;

 exchange=0;

 while(k

 {

  if(R[k]>R[k+1])

  {

 x=R[k];R[k]=R[k+1];R[k+1]=x;

 exchange=1;

}

K+=2

}

 pass++;

}while(exchange==1||pass<=1);

}

第一趟(pass=0):

第二趟(pass=1):

34.已知二叉排序树中结点的关键字为整数,设计递归算法按递增有序性输出树中所有大于或等于给定值x的结点,并以函数的参数返回输出的结点个数。

假设以二叉链表为存储结构,其结点结构为:

  

lchild

key

rchild

33.已知序列(10,18,4,3,6,12,1,9,15,8),请给出采用二路归并排序法对该序列进行升序排序时的每一趟结果。

(6分)

35.修改冒泡排序法以实现双向冒泡排序。

双向冒泡排序指第一次把最大记录放到表尾,第二次把最小记录放到表头,如此反复进行。

试编写修改后的算法:

voiddbubble(inta[],intn)。

(8分)

试题三

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

[函数3.1说明]

函数insert_sort(inta[],intcount)是用直接插入排序法对指定数组的前count个元素从小到大排序。

直接插入排序法的基本思想是:

将整个数组(count个元素)看成是由有序的(a[0],…,a[i-1])和无序的(a[i],…,a[Count-1))两个部分组成;初始时i等于1,每趟排序时将无序部分中的第一个元素a[i]插入到有序部分中的恰当位置,共需进行count-1趟,最终使整个数组有序。

[函数3.1]

voidinsert_sort(inta[],intcount)

{inti,j,t;

for(i=1;i

{/*控制a[i],……,a[count-1]的比较和插入*/

t=a[i];

j=

(1);

while(j>=0&&t

{/*在有序部分中寻找元素a[i]的插入位置*/

(2);

j--;

}

(3);

}

}

[函数3.2说明]

递归函数invert(inta[],intk)将指定数组中的前k个元素逆置。

[函数3.2]

voidinvert(inta[],intk);

{intt;

if((4)){

invert((5));

t=a[0];

a[0]=a[k-1];

a[k-1]=t;

}

}

试题五

阅读下列函数说明和C代码,将应填入(n)处的字句写在答题纸的对应栏内。

设二叉树的结点数据类型为:

typedefstructnode{

chardata;

structnode*left;

structnode*right:

}BTREE;

[函数5.1说明]

函数voidSortTreelnsert(BTREE**tree,BTREE*s)采用递归方法,将结点s插入以*tree为根结点指针的二叉排序树(二叉查找树)中。

[函数5.1)

voidSortTreelnsert(BTREE**tree,BTREE*S)

{if(*tree==NULL)*tree=S;

elseif(S->data<(*tree)->data)

SortTreelnsert(

(1),S);

elseif(S->data>(*tree)->data)

SortTreelnsert(

(2),S);

}

[函数5.2说明]

函数voidTraversalTree(BTREE*

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 经管营销 > 金融投资

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1