书面作业: 第七章 排序

判断

1-1
仅基于比较的算法能得到的最好的“最坏时间复杂度”是O(NlogN)。T

1-2
对N个记录进行简单选择排序,比较次数和移动次数分别为O(N2)和O(N)。 T

1-3
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。F

1-4
要从50个键值中找出最大的3个值,选择排序比堆排序快。T

1-5
对N个记录进行快速排序,在最坏的情况下,其时间复杂度是O(NlogN)。F

1-6
(neuDS)直接插入排序算法在最好情况下的时间复杂度为O(n)。T

1-7
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。F

选择

2-1
下列排序算法中,哪种算法可能出现:在最后一趟开始之前,所有的元素都不在其最终的位置上?(设待排元素个数N>2) ( B )
A.冒泡排序
B.插入排序
C.堆排序
D.快速排序

2-2
对于7个数进行冒泡排序,需要进行的比较次数为: ( C )
A.7
B.14
C.21
D.49

2-3
排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置的方法称为: ( A )
A.插入排序
B.选择排序
C.快速排序
D.归并排序

2-4
对于10个数的简单选择排序,最坏情况下需要交换元素的次数为: ( A )
A.9
B.36
C.45
D.100

2-6
若数据元素序列{ 12, 13, 8, 11, 5, 16, 2, 9 }是采用下列排序方法之一得到的第一趟排序后的结果,则该排序算法只能是: ( D )
A.快速排序
B.选择排序
C.堆排序
D.归并排序

2-7
设有1000个元素的有序序列,如果用二分插入排序再插入一个元素,则最大比较次数是:( D )
A.1000
B.999
C.500
D.10

2-9
对初始状态为递增序列的表按递增顺序排序,最费时间的是( A )算法。
A.快速排序
B.归并排序
C.插入排序
D.堆排序

2-10
对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15},则采用的是( B )排序法。
A.快速
B.希尔
C.冒泡
D.选择

2-11
就平均性能而言,目前最好的内排序方法是( C )排序法。
A.希尔
B.冒泡
C.快速
D.交换

2-12
对序列{15,9,7,8,20,-1,4,} 用希尔排序方法排序,经一趟后序列变为{15,-1,4,8,20,9,7}则该次采用的增量是( C )。
A.2
B.1
C.4
D.3

2-17
对初始数据序列{ 8, 3, 9, 11, 2, 1, 4, 7, 5, 10, 6 }进行希尔排序。若第一趟排序结果为( 1, 3, 7, 5, 2, 6, 4, 9, 11, 10, 8 ),第二趟排序结果为( 1, 2, 6, 4, 3, 7, 5, 8, 11, 10, 9 ),则两趟排序采用的增量(间隔)依次是: ( D )
A.3, 1
B.3, 2
C.5, 2
D.5, 3

2-13
下列排序算法中,( D )算法可能会出现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。
A.快速排序
B.堆排序
C.冒泡排序
D.插入排序

2-16
数据序列{ 3, 1, 4, 11, 9, 16, 7, 28 }只能是下列哪种排序算法的两趟排序结果?( B )
A.冒泡排序
B.快速排序
C.插入排序
D.堆排序

2-14
若用冒泡排序法对序列{10,14,26,29,41,52}从大到小排序,需进行( C )次比较。
A.25
B.3
C.15
D.10

2-15
对于快速排序,当待排记录有序时,每回划分均以第一个元素作为枢轴,如下说法正确的是: ( C )
A.适用于顺序存储结构,算法时间复杂度时O(N)
B.适用于链式存储结构,算法时间复杂度时O(N)
C.适用于顺序存储结构,算法时间复杂度时O(N2)
D.适用于链式存储结构,算法时间复杂度时O(N2)

程序填空

5-1
本题要求用冒泡排序将一组整数按增序排序。冒泡排序每次从头到尾扫描待排序列,检查相邻两数的顺序,如果顺序不对就交换。请补全下列冒泡排序的代码。

typedef struct node *nodeptr;
struct node{
   int value;
   nodeptr next;
   /* 一些其他的项,在此忽略 */
};

nodeptr BubbleSort (nodeptr h)
{/* h 是带空头结点的链表的头指针 */
   nodeptr p, q;
   int flag_swap;

   if (!h->next)  return h;
   do{
      flag_swap = 0;
      p = h;
      while (p->next->next){
         if ( 
p->next->value > p->next->next->value
 ){
            flag_swap++;
            q = p->next;
            p->next = q->next;
            q->next = p->next->next;            
            p->next->next = q;
         }
         else p = p->next;
      }
   } while (flag_swap > 0);
   return h;
}

5-3
本题要求给出希尔排序对给定初始序列{9, 8, 7, 6, 5, 4, 3, 2, 1}利用增量序列{1, 3, 7}进行排序的分步结果。将每步结果填在下列空中。注意:相邻数字间必须有一个空格,开头结尾不得有多余空格。

原始序列9 8 7 6 5 4 3 2 1
增量7排序后2 1 7 6 5 4 3 9 8
增量3排序后2 1 4 3 5 7 6 9 8
增量1排序后1 2 3 4 5 6 7 8 9
已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 游动-白 设计师:上身试试 返回首页