数据结构习题-chp10--排序

数据结构习题-chp10–排序

一、 单项选择题

  1. 快速排序在最坏情况下的时间复杂度为 D 。
    A.O(log2n) B.O(nlog2n) C.0(n) D.0(n2)
  2. 排序是根据( A)的大小重新安排各元素的顺序。
    A.关键字 B.数组 C.元素件 D.结点
  3. 评价排序算法好坏的标准主要是( D )。
    A.执行时间 B.辅助空间
    C.算法本身的复杂度 D.执行时间和所需的辅助空间
  4. 直接插入排序的方法是( B )的排序方法。
    A.不稳定 B.稳定 C.外部 D.选择
  5. 直接插入排序的方法要求被排序的数据( B )存储。
    A.必须链表 B.必须顺序 C.顺序或链表 D.可以任意
  6. 排序方法中,从无序序列中选择关键字最小的记录,将其与无序区(初始为空)的第一个记录交换的排序方法,称为 ( D )。
    A.希尔排序 B.归并排序 C.插入排序 D. 选择排序
  7. 每次把待排序方的区间划分为左、右两个区间,其中左区间中元素的值不大于基准元素的值,右区间中元素的值不小于基准元素的值,此种排序方法叫做( C )。
    A.冒泡排序 B.堆排序 C.快速排序 D. 归并排序
  8. 下述几种排序方法中,要求内存量最大的是:( D )。
    A.插入排序 B.选择排序 C.快速排序 D. 归并排序
  9. 直接插入排序的方法是从第( B )个元素开始,插入到前边适当位置的排序方法。
    A.1 B.2 C.3 D.n
  10. 堆的形状是一棵( C )。
    A.二叉排序树 B.满二叉树 C.完全二叉树 D.平衡二叉树
  11. 内排序是指在排序的整个过程中,全部数据都在计算机的( A )中完成的排序。
    A.内存 B.外存 C.内存和外存 D.寄存器
  12. 快速排序的方法是( A )的排序方法。
    A.不稳定 B.稳定 C.外部 D.选择
  13. 下列排序方法中,关键字比较次数与记录的初始排列次序无关的是( A )。
    A.选择排序 B.希尔排序 C.插入排序 D.冒泡排序
  14. 下述几种排序方法中,平均时间复杂度最小的是( A )。
    A.希尔排序 B.插入排序 C.冒泡排序 D.选择排序
  15. 对有n个记录的表作快速排序,在最坏情况下,算法的时间复杂度是( B )。
    A.O(n) B.O(n2) C.O(nlog2n) D.O(n3)
  16. 冒泡排序的方法对n个数据进行排序,第一趟排序共需要比较( C )次。
    A.1 B.2 C.n-1 D.n
  17. 对n个不同的排序码进行冒泡(递增)排序,在下列( B )情况比较的次数最多。
    A.从小到大排列好的 B.从大到小排列好的 C. 元素无序 D.元素基本有序
  18. 用直接插入排序法对下面的四个序列进行由小到大的排序,元素比较次数最少的是( B )。
    A,94,32,40,90,80,46,21,69 B.21,32,46,40,80,69,90,94
    C.32,40,21,46,69,94,90,80 D.90,69,80,46,21,32,94,40
  19. 一组记录的排序码为(25,48,16,35,79,82,23,40),其中含有4个长度为2的有序表,按归并排序的方法对该序列进行一趟归并后的结果为:( A )。
    A,16 25 35 48 23 40 79 82 36 72 B.16 25 35 48 79 82 23 36 40 72
    C.16 25 48 35 79 82 23 36 40 72 D.16 25 35 48 79 23 36 40 72 82
  20. 一个数据序列的关键字为:(46,79,56,38,40,84),采用快速排序,并以第一个数为基准得到第一次划分的结果为:( C )
    A.(38,40,46,56,79,84) B.(40,38,46,79,56,84)
    C.(40,38,46,56,79,84) D.(40,38,46,79,56,84)

二、填空题

  1. 设一组初始记录关键字序列为(20,18,22,16,30,19),则以20为枢轴的一趟快速排序结果为 20 18 16 19 22 30 。
  2. 设关键字序列为(Kl,K2,…,Kn),则用筛选法建初始堆必须从第 2 个元素开始进行筛选。
  3. 设一组初始记录关键字序列为(49,38,65,97,76,13,27,50),则以d=4为增量的一趟希尔排序结束后的结果为 49 13 27 50 76 38 65 97 。
  4. 在插入排序、选择排序和归并排序中,排序是不稳定的为: 选择排序 。
  5. 在对一组记录(54,38,96,23,15,72,60,45,83)进行直接插入排序时,当把第7个记录60插入到有序表时,为寻找插入位置需比较 3 次。
  6. 两个序列分别为:
    L1={25,57,48,37,92,86,12,33}
    L2={25,37,33,12,48,57,86,92}。
    用冒泡排序法对L1和L2进行排序,交换次数较少的是序列: L2 。
  7. 对一组记录(54,35,96,21,12,72,60,44,80)进行直接选择排序时,第四次选择和交换后,未排序记录是 54 72 60 96 80 。

三、判断题

  1. 层次遍历初始堆可以得到一个有序的序列。( √ )
  2. 如果某种排序算法不稳定,则该排序方法就没有实用价值。( × )
  3. 希尔排序是不稳定的排序。( √ )
  4. 冒泡排序是不稳定的排序。( × )
  5. 对n个记录的进行快速排序,所需要的平均时间是O(nlog2n)。( √ )
  6. 堆排序所需的时间与待排序的记录个数无关。( ×)
  7. 当待排序的元素个数很多时,为了交换元素的位置要占用较多的时间,这是影响时间复杂度的主要因素。( √ )
  8. 快速排序在任何情况下都比其它排序方法速度快。( √)
  9. 对快速排序来说,初始序列为正序或反序都是最坏情况。( √ )

四、排序过程分析

  1. 已知数据序列{10,18,4,3,6,12,9,15,8},写出希尔排序每一趟(设d=4、2、1)排序的结果。数据结构习题-chp10--排序_第1张图片
  2. 已知数据序列{10,18,4,3,6,12,9,15},写出二路归并排序的每一趟排序结果。
    数据结构习题-chp10--排序_第2张图片

五、程序填空题

1. 设表的长度为L,试填空完成直接插入排序程序。

void insertsort(int R[ ])           // 按递增序对R[1]~ R[ n ]进行直接插入排序
{
      int  i,j;
  for ( i=2; i<=  L     ; i++ )
    {
      R[0]=R[i];   		            // 设定R[0]为监视哨
      j=     i-1while (R[0]  <    R[j] )
        {
      R[j+1]= R[j] ;
          j-- ;  
}
         R[j+1]=   R[0]    ;        // 插入第i个记录
     }
 }

2.二分插入排序

void BInsSort( )    // 按递增序对R[1]~R[ n ]进行二分插入排序
{
      int  i, j, low, high, m;
   for ( i=2; i<=   n  ; i++)
    {
      R[0]=R[i];  		            // 设定R[0]为监视哨
low=1; 
high=  n      ;
while (low   <=     high)
        {
        m=(low+high)/2     ;
if ( R[0]<R[m] )
    high=m-1 ;
else 
low=m+1;  
}
     for (j=i-1;j>=high+1;j--)
 R[j+1]=   R[j]      ; 	        // 元素后移
      R[high]=R[0];                 // 插入

}
}

你可能感兴趣的:(C/C++,数据结构,排序算法)