判断
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 |