PTA数据结构与算法-第七章——排序


第一章——褚论

第二章——线性表

第三章——栈与队列

第四章——字符串

第五章——树与二叉树

第六章——图

第七章——排序

第八章——检索


判断题

1-1
仅基于比较的算法能得到的最好的“最坏时间复杂度”是O(NlogN)。
T 对N个记录进行快速排序,在最坏的情况下,其时间复杂度是O(NlogN)。


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


1-3
对N个不同的数据采用冒泡排序进行从大到小的排序,当元素基本有序时交换元素次数肯定最多。
F
1-4
要从50个键值中找出最大的3个值,选择排序比堆排序快。
T 规模较小直接选择排序快。


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


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


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


单选题

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

冒泡排序
插入排序
堆排序
快速排序


2-2
对于7个数进行冒泡排序,需要进行的比较次数为:

7
14
21
49
6+5+4+3+2+1=21;


2-3
排序方法中,从未排序序列中依次取出元素与已排序序列中的元素进行比较,将其放入已排序序列的正确位置的方法称为:

插入排序
选择排序
快速排序
归并排序


2-4
对于10个数的简单选择排序,最坏情况下需要交换元素的次数为:

9
36
45
100
解析:
对于简单选择排序,无论最好最坏都要交换N-1次;


2-6
若数据元素序列{ 12, 13, 8, 11, 5, 16, 2, 9 }是采用下列排序方法之一得到的第一趟排序后的结果,则该排序算法只能是:

快速排序
选择排序
堆排序
归并排序
解析:

  • 排除选择排序,因为选择排序后,最前面一定是最小的或最大的;
  • 排除快速排序,因为快速排序一次后,有两个值相同,有一个数存放在临时变量;
  • 排除堆排序 一次排序后建堆
    在这里插入图片描述
    由图可看出不符合堆;
  • 归并排序 12 13 | 8 11 | 5 16 | 2 9 符合;

2-7
设有1000个元素的有序序列,如果用二分插入排序再插入一个元素,则最大比较次数是:

1000
999
500
10


2-9
对初始状态为递增序列的表按递增顺序排序,最费时间的是()算法。

快速排序
归并排序
插入排序
堆排序


2-10
对序列{15,9,7,8,20,-1,4}进行排序,进行一趟后数据的排列变为{4,9,-1,8,20,7,15},则采用的是()排序法。

快速
希尔
冒泡
选择


2-11
就平均性能而言,目前最好的内排序方法是()排序法。

希尔
冒泡
快速
交换


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

2
1
4
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 ),则两趟排序采用的增量(间隔)依次是:

3, 1
3, 2
5, 2
5, 3


2-13
下列排序算法中,()算法可能会出现下面情况:在最后一趟开始之前,所有元素都不在其最终的位置上。

快速排序
堆排序
冒泡排序
插入排序


2-16
数据序列{ 3, 1, 4, 11, 9, 16, 7, 28 }只能是下列哪种排序算法的两趟排序结果?

冒泡排序
快速排序
插入排序
堆排序


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

25
3
15
10
解析:
需要进行5!次比较即
(5+1)*5/2=15


2-15
对于快速排序,当待排记录有序时,每回划分均以第一个元素作为枢轴,如下说法正确的是:

适用于顺序存储结构,算法时间复杂度时O(N)
适用于链式存储结构,算法时间复杂度时O(N)
适用于顺序存储结构,算法时间复杂度时O(N^2)
适用于链式存储结构,算法时间复杂度时O(N^2)

填空题

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;
}

p->next->value>p->next->next->value
p->next=q->next
q->next=p->next->next
p->next->next=q


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

  • 6
    点赞
  • 42
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值