交换类排序与选择类排序-计算机17级(期末复习带详解版)

解析在下面

 

 

解析

p1-1:

这个取决于你用的堆排序的算法(有两种,不会自己查),垃圾的算法是这样的,正常的好的算法不需要这种操作

p1-2:

比价次数在两个for下面,而移动次数在一个for下面,so

p1-3:

由于多次插入排序,我们知道一次插入排序是稳定的,不会改变相同元素的相对顺序,但在不同的插入排序过程中,相同的元素可能在各自的插入排序中移动,最后其稳定性就会被打乱,所以shell排序是不稳定的。

p1-4:

这里好好理解一下基本有序!!!

基本有序一般指的是基本都是升序的,不是完全哦

所有基本有序次数不一定最多,完全有序次数才最多

 

x2-1:

前三个选择题都是一个题其实,我一起说了,快速排序的时间复杂度

平均为O(nlogn),最好为O(nlogn),最差为O(n2)。

第一题,如果左右指针都会停止移动,也就意味着停下来就交换,这种情况对应的时间复杂度为O(nlogn)

第二三题一样的,相当于不理他,继续移动指针,实际上至于一个指针会移动,另一个指针根本没来得及动,这也就会造成选择的主元在序列的某一端,这种情况对应的时间复杂度为最差为O(n2)

至于原因自己看慕课或者查资料吧

x2-4:

要注意d哈,前面说了基本有序不等于完全有序

x2-5:

这题不严谨,应该是最坏情况下,也就是逆序的时候,比较次数为等差求和公式

x2-6:

这个题要知道两点,首先你得知道堆排序是建立最大堆,第二你得会建堆

关于建堆,就是先把这组树写成一个完全二叉树,然后把它调整成一个最大堆。

过程其实类似堆的删除操作,就是每次从倒数第一个有儿子的结点开始,把每个结点都调成最大堆就好了

图示。。。凑活看吧

 

x2-7:

这个递归次数与初始数据的排列次序有关,与每次划分后得到的分区处理顺序无关

x2-8:

快排的时间复杂度

平均为O(nlogn),最好为O(nlogn),最差为O(n2)。

x2-9:

就是以46为主元分成两边,一边比他小,一边比他大,两边再进行下一次递归前无顺序要求

说一下,下面两个题考希尔排序,套路很明显,一定学会

x2-10:

这个题如果你了解希尔排序的过程的话就没啥难的,如果你选4间隔(步长),那么首先就是49,76,两个顺序不用调,放在两个拼接的子序列中(插入排序)。然后是38,13,顺序要调整,然后再次插入相应的子序列中,以此类推即可。

x2-11:

这个和上面的题差不多,了解希尔排序的过程的话就没啥难的。第一趟排完序的和原始的第一个都是15,说明第一次选择的增量对应的元素是升序,没有交换位置,观察序列发现只有15,20,8没动,经过分析可知第一次选择的增量对应的元素为15和20,两个之间下标只差为4,so增量为4

x2-12:

12,13题都是简单选择排序,我就一起说了

总结一下简单选择排序:

简单选择排序它最大的特点是交换移动数据次数相当少,这样也就节约了相应的时间,无论最好最坏的情况,其比较次数都是一样多。第 i 次排序需要进行n-i 次关键字的比较,此时需要比较n-1+n-2+...+1=n(n-1)/2次,时间复杂度为O(n^2)。对于交换次数而言,当最好的时候,交换为0次,最差的时候,也就初始排序,交换次数为n-1次,复杂度为O(n)。

x2-14,15:

堆排序有两种算法,一个好的,一个坏的,坏的时间复杂度是O(NlogN),这种情况还需要额外的空间O(N),所以一般没人选择。正常的好的方法不需要额外的空间,也就是需要的额外空间为O(1)

后面的不用看了

 

 

 

 

 

1-1

对N个记录进行堆排序,需要的额外空间为O(N)。 (1分)

T         F

 

作者: DS课程组

单位: 浙江大学

1-2

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

T         F

 

作者: DS课程组

单位: 浙江大学

1-3

希尔排序是稳定的算法。 (1分)

T         F

 

作者: DS课程组

单位: 浙江大学

1-4

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

T         F

2-1

在快速排序的一趟划分过程中,当遇到与基准数相等的元素时,如果左右指针都会停止移动,那么当所有元素都相等时,算法的时间复杂度是多少?(2分)

  1. O(logN)
  2. O(N)
  3. O(NlogN)
  4. O(N​2​​)

作者: DS课程组

单位: 浙江大学

2-2

在快速排序的一趟划分过程中,当遇到与基准数相等的元素时,如果左右指针都不停止移动,那么当所有元素都相等时,算法的时间复杂度是多少?(2分)

  1. O(logN)
  2. O(N)
  3. O(NlogN)
  4. O(N​2​​)

作者: DS课程组

单位: 浙江大学

2-3

在快速排序的一趟划分过程中,当遇到与基准数相等的元素时,如果左指针停止移动,而右指针在同样情况下却不停止移动,那么当所有元素都相等时,算法的时间复杂度是多少?(2分)

  1. O(logN)
  2. O(N)
  3. O(NlogN)
  4. O(N​2​​)

作者: DS课程组

单位: 浙江大学

2-4

对N个不同的数据采用冒泡算法进行从大到小的排序,下面哪种情况下肯定交换元素次数最多? (1分)

  1. 从小到大排好的
  2. 从大到小排好的
  3. 元素无序
  4. 元素基本有序

作者: DS课程组

单位: 浙江大学

2-5

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

  1. 7
  2. 14
  3. 21
  4. 49

作者: DS课程组

单位: 浙江大学

2-6

有组记录的排序码为{ 46,79,56,38,40,84 },则利用堆排序的方法建立的初始堆为: (2分)

  1. 79,46,56,38,40,80
  2. 84,79,56,46,40,38
  3. 84,56,79,40,46,38
  4. 84,79,56,38,40,46

作者: DS课程组

单位: 浙江大学

2-7

采用递归方式对顺序表进行快速排序,下列关于递归次数的叙述中,正确的是: (2分)

  1. 每次划分后,先处理较长的分区可以减少递归次数
  2. 每次划分后,先处理较短的分区可以减少递归次数
  3. 递归次数与每次划分后得到的分区处理顺序无关
  4. 递归次数与初始数据的排列次序无关

作者: DS课程组

单位: 浙江大学

2-8

对N个记录进行快速排序,在最坏的情况下,其时间复杂度是: (1分)

  1. O(N)
  2. O(NlogN)
  3. O(N​2​​)
  4. O(N​2​​logN)

作者: DS课程组

单位: 浙江大学

2-9

有组记录的排序码为{46,79,56,38,40,84 },采用快速排序(以位于最左位置的对象为基准而)得到的第一次划分结果为: (2分)

  1. {38,46,79,56,40,84}
  2. {38,79,56,46,40,84}
  3. {38,46,56,79,40,84}
  4. {40,38,46,56,79,84}

作者: DS课程组

单位: 浙江大学

2-10

对于序列{ 49,38,65,97,76,13,27,50 },按由小到大进行排序,下面哪一个是初始步长为4的希尔排序法第一趟的结果? (2分)

  1. 13,27,38,49,50,65,76,97
  2. 49,13,27,50,76,38,65,97
  3. 49,76,65,13,27,50,97,38
  4. 97,76,65,50,49,38,27,13

作者: DS课程组

单位: 浙江大学

2-11

给定初始待排序列{ 15,9,7,8,20,-1,4 }。如果希尔排序第一趟结束后得到序列为{ 15,-1,4,8,20,9,7 },则该趟增量为: (2分)

  1. 1
  2. 2
  3. 3
  4. 4

作者: DS课程组

单位: 浙江大学

2-12

对N个元素采用简单选择排序,比较次数和移动次数分别为: (1分)

  1. O(N​2​​), O(N)
  2. O(N), O(logN)
  3. O(logN), O(N​2​​)
  4. O(NlogN), O(NlogN)

作者: DS课程组

单位: 浙江大学

2-13

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

  1. 9
  2. 36
  3. 45
  4. 100

作者: DS课程组

单位: 浙江大学

2-14

对N个记录进行堆排序,最坏的情况下时间复杂度是: (1分)

  1. O(logN)
  2. O(N)
  3. O(NlogN)
  4. O(N​2​​)

作者: DS课程组

单位: 浙江大学

2-15

对N个记录进行堆排序,需要的额外空间为: (1分)

  1. O(1)
  2. O(logN)
  3. O(N)
  4. O(NlogN)

 

 

 

 

 

  • 5
    点赞
  • 28
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
好的,我来分别回答您的问题。 直接插入排序算法: 直接插入排序是一种简单的排序算法,它的基本思想是将一个记录插入到已经排好序的有序表中,从而得到一个新的、记录增加1的有序表。 算法步骤如下: 1. 将待排序的序列分成两个部分:已排序部分和未排序部分。 2. 取出未排序部分的第一个元素,将它插入到已排序部分的合适位置,使得插入后仍然是有序的。 3. 重复上述步骤,直至未排序部分为空。 下面是直接插入排序的 Python 代码实现: ```python def insert_sort(lst): n = len(lst) for i in range(1, n): key = lst[i] j = i - 1 while j >= 0 and lst[j] > key: lst[j + 1] = lst[j] j -= 1 lst[j + 1] = key return lst ``` 冒泡排序算法: 冒泡排序是一种交换排序算法,它的基本思想是通过不断地交换相邻的元素,把小的元素组的一端移动,把大的元素组的另一端移动,从而达到排序的目的。 算法步骤如下: 1. 从组的第一个元素开始,依次比较相邻的两个元素的大小。 2. 如果它们的顺序不正确,就交换它们的位置,使得较小的元素被移到组的前面。 3. 重复上述步骤,直至整个组都被排序。 下面是冒泡排序的 Python 代码实现: ```python def bubble_sort(lst): n = len(lst) for i in range(n): for j in range(n - i - 1): if lst[j] > lst[j + 1]: lst[j], lst[j + 1] = lst[j + 1], lst[j] return lst ``` 希望我的回答能够帮到您!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值